Total programs: 90
int main(void) {
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 KR_RETURN return
7 BROJ 0
8 TOCKAZAREZ ;
9 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_RETURN 2 6
BROJ 2 7
TOCKAZAREZ 2 8
D_VIT_ZAGRADA 3 9
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (2,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (2,0) [type=int]
TOCKAZAREZ (2,;)
D_VIT_ZAGRADA (3,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Compound statement
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
int y;
x = 5;
y = 10;
if (x < y) {
return 1;
} else {
return 0;
}
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 IDN y
9 OP_PRIDRUZI =
10 BROJ 5
11 BROJ 10
12 KR_IF if
13 OP_LT <
14 KR_RETURN return
15 BROJ 1
16 D_VIT_ZAGRADA }
17 KR_ELSE else
18 BROJ 0
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 9
BROJ 4 10
TOCKAZAREZ 4 7
IDN 5 8
OP_PRIDRUZI 5 9
BROJ 5 11
TOCKAZAREZ 5 7
KR_IF 6 12
L_ZAGRADA 6 2
IDN 6 6
OP_LT 6 13
IDN 6 8
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
KR_RETURN 7 14
BROJ 7 15
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 16
KR_ELSE 8 17
L_VIT_ZAGRADA 8 5
KR_RETURN 9 14
BROJ 9 18
TOCKAZAREZ 9 7
D_VIT_ZAGRADA 10 16
D_VIT_ZAGRADA 11 16
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
KR_ELSE , else
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
KR_ELSE , else
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
y : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (3,y) [symbol=y]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,y) [symbol=y]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,10) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (6,if)
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,x) [symbol=x]
OP_LT (6,<)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,1) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
KR_ELSE (8,else)
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (8,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (9,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,0) [type=int]
TOCKAZAREZ (9,;)
D_VIT_ZAGRADA (10,})
D_VIT_ZAGRADA (11,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
MOVE 10, R0 ; load constant 10
STORE R0, (R7-8) ; assign to y
; If-else statement
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
LOAD R0, (R7-8) ; load variable y
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLT L_SC_TRUE1 ; comparison OP_LT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_ELSE1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
JP L_END1 ; skip else
L_ELSE1 ; else clause
; Compound statement
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if-else
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 5;
if (x >= 5) {
return 1;
}
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 KR_IF if
11 OP_GTE >=
12 KR_RETURN return
13 BROJ 1
14 D_VIT_ZAGRADA }
15 BROJ 0
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_IF 4 10
L_ZAGRADA 4 2
IDN 4 6
OP_GTE 4 11
BROJ 4 9
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
KR_RETURN 5 12
BROJ 5 13
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 14
KR_RETURN 7 12
BROJ 7 15
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 14
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GTE , >=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GTE , >=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (4,if)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_GTE (4,>=)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,0) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
; If statement
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 5, R0 ; load constant 5
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGE L_SC_TRUE1 ; comparison OP_GTE
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 5;
if (x <= 5) {
return 1;
}
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 KR_IF if
11 OP_LTE <=
12 KR_RETURN return
13 BROJ 1
14 D_VIT_ZAGRADA }
15 BROJ 0
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_IF 4 10
L_ZAGRADA 4 2
IDN 4 6
OP_LTE 4 11
BROJ 4 9
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
KR_RETURN 5 12
BROJ 5 13
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 14
KR_RETURN 7 12
BROJ 7 15
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 14
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_LTE , <=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_LTE , <=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (4,if)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_LTE (4,<=)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,0) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
; If statement
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 5, R0 ; load constant 5
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLE L_SC_TRUE1 ; comparison OP_LTE
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 5;
if (x == 5) {
return 1;
}
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 KR_IF if
11 OP_EQ ==
12 KR_RETURN return
13 BROJ 1
14 D_VIT_ZAGRADA }
15 BROJ 0
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_IF 4 10
L_ZAGRADA 4 2
IDN 4 6
OP_EQ 4 11
BROJ 4 9
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
KR_RETURN 5 12
BROJ 5 13
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 14
KR_RETURN 7 12
BROJ 7 15
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 14
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (4,if)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_EQ (4,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,0) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
; If statement
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 5, R0 ; load constant 5
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_EQ L_SC_TRUE1 ; comparison OP_EQ
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 5;
if (x != 0) {
return 1;
}
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 KR_IF if
11 OP_NEQ !=
12 BROJ 0
13 KR_RETURN return
14 BROJ 1
15 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_IF 4 10
L_ZAGRADA 4 2
IDN 4 6
OP_NEQ 4 11
BROJ 4 12
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
KR_RETURN 5 13
BROJ 5 14
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 15
KR_RETURN 7 13
BROJ 7 12
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 15
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_NEQ , !=
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_NEQ , !=
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (4,if)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_NEQ (4,!=)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,0) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
; If statement
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_NE L_SC_TRUE1 ; comparison OP_NEQ
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
int y;
x = 5;
y = 10;
if (x > 0 && y > 0) {
return 1;
}
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 IDN y
9 OP_PRIDRUZI =
10 BROJ 5
11 BROJ 10
12 KR_IF if
13 OP_GT >
14 BROJ 0
15 OP_I &&
16 KR_RETURN return
17 BROJ 1
18 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 9
BROJ 4 10
TOCKAZAREZ 4 7
IDN 5 8
OP_PRIDRUZI 5 9
BROJ 5 11
TOCKAZAREZ 5 7
KR_IF 6 12
L_ZAGRADA 6 2
IDN 6 6
OP_GT 6 13
BROJ 6 14
OP_I 6 15
IDN 6 8
OP_GT 6 13
BROJ 6 14
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
KR_RETURN 7 16
BROJ 7 17
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 18
KR_RETURN 9 16
BROJ 9 14
TOCKAZAREZ 9 7
D_VIT_ZAGRADA 10 18
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
OP_I , &&
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
OP_I , &&
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
y : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (3,y) [symbol=y]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,y) [symbol=y]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,10) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (6,if)
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,x) [symbol=x]
OP_GT (6,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
OP_I (6,&&)
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
OP_GT (6,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,1) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (9,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,0) [type=int]
TOCKAZAREZ (9,;)
D_VIT_ZAGRADA (10,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
MOVE 10, R0 ; load constant 10
STORE R0, (R7-8) ; assign to y
; If statement
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE2 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END2
L_SC_TRUE2
MOVE 1, R0 ; comparison result true
L_SC_END2
CMP R0, 0
JP_EQ L_SC_FALSE1 ; short-circuit: left is false
LOAD R0, (R7-8) ; load variable y
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE3 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END3
L_SC_TRUE3
MOVE 1, R0 ; comparison result true
L_SC_END3
CMP R0, 0
JP_EQ L_SC_FALSE1 ; right is false
MOVE 1, R0 ; result is true
JP L_SC_END1
L_SC_FALSE1
MOVE 0, R0 ; result is false
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
int y;
x = 0;
y = 10;
if (x > 0 || y > 0) {
return 1;
}
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 IDN y
9 OP_PRIDRUZI =
10 BROJ 0
11 BROJ 10
12 KR_IF if
13 OP_GT >
14 OP_ILI ||
15 KR_RETURN return
16 BROJ 1
17 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 9
BROJ 4 10
TOCKAZAREZ 4 7
IDN 5 8
OP_PRIDRUZI 5 9
BROJ 5 11
TOCKAZAREZ 5 7
KR_IF 6 12
L_ZAGRADA 6 2
IDN 6 6
OP_GT 6 13
BROJ 6 10
OP_ILI 6 14
IDN 6 8
OP_GT 6 13
BROJ 6 10
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
KR_RETURN 7 15
BROJ 7 16
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 17
KR_RETURN 9 15
BROJ 9 10
TOCKAZAREZ 9 7
D_VIT_ZAGRADA 10 17
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
OP_ILI , ||
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
OP_ILI , ||
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
y : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (3,y) [symbol=y]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,y) [symbol=y]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,10) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (6,if)
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,x) [symbol=x]
OP_GT (6,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
OP_ILI (6,||)
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
OP_GT (6,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,1) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (9,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,0) [type=int]
TOCKAZAREZ (9,;)
D_VIT_ZAGRADA (10,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-4) ; assign to x
MOVE 10, R0 ; load constant 10
STORE R0, (R7-8) ; assign to y
; If statement
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE2 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END2
L_SC_TRUE2
MOVE 1, R0 ; comparison result true
L_SC_END2
CMP R0, 0
JP_NE L_SC_TRUE1 ; short-circuit: left is true
LOAD R0, (R7-8) ; load variable y
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE3 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END3
L_SC_TRUE3
MOVE 1, R0 ; comparison result true
L_SC_END3
CMP R0, 0
JP_NE L_SC_TRUE1 ; right is true
MOVE 0, R0 ; result is false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; result is true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 5;
if (!(x == 0)) {
return 1;
}
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 KR_IF if
11 OP_NEG !
12 OP_EQ ==
13 BROJ 0
14 KR_RETURN return
15 BROJ 1
16 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_IF 4 10
L_ZAGRADA 4 2
OP_NEG 4 11
L_ZAGRADA 4 2
IDN 4 6
OP_EQ 4 12
BROJ 4 13
D_ZAGRADA 4 4
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
KR_RETURN 5 14
BROJ 5 15
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 16
KR_RETURN 7 14
BROJ 7 13
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 16
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
OP_NEG , !
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
OP_NEG , !
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (4,if)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_operator>> [lvalue=false, elements=0]
OP_NEG (4,!)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_EQ (4,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
D_ZAGRADA (4,))
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,0) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
; If statement
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
i = 0;
while (i < 10) {
i = i + 1;
}
return i;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 0
10 KR_WHILE while
11 OP_LT <
12 BROJ 10
13 PLUS +
14 BROJ 1
15 D_VIT_ZAGRADA }
16 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_WHILE 4 10
L_ZAGRADA 4 2
IDN 4 6
OP_LT 4 11
BROJ 4 12
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
IDN 5 6
OP_PRIDRUZI 5 8
IDN 5 6
PLUS 5 13
BROJ 5 14
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 15
KR_RETURN 7 16
IDN 7 6
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 15
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
i : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_WHILE (4,while)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_LT (4,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,10) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
PLUS (5,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,i) [symbol=i]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-4) ; assign to i
; While loop
L_LOOP1 ; while loop start
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 10, R0 ; load constant 10
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLT L_SC_TRUE1 ; comparison OP_LT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_BREAK1 ; exit while loop
; Compound statement
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
STORE R0, (R7-4) ; assign to i
L_CONTINUE1 ; while continue
JP L_LOOP1 ; repeat while loop
L_BREAK1 ; while loop end
LOAD R0, (R7-4) ; load variable i
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
i = 0;
while (i < 5) {
i = i + 1;
if (i == 3) {
break;
}
}
return i;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 0
10 KR_WHILE while
11 OP_LT <
12 BROJ 5
13 PLUS +
14 BROJ 1
15 KR_IF if
16 OP_EQ ==
17 BROJ 3
18 KR_BREAK break
19 D_VIT_ZAGRADA }
20 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_WHILE 4 10
L_ZAGRADA 4 2
IDN 4 6
OP_LT 4 11
BROJ 4 12
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
IDN 5 6
OP_PRIDRUZI 5 8
IDN 5 6
PLUS 5 13
BROJ 5 14
TOCKAZAREZ 5 7
KR_IF 6 15
L_ZAGRADA 6 2
IDN 6 6
OP_EQ 6 16
BROJ 6 17
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
KR_BREAK 7 18
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 19
D_VIT_ZAGRADA 9 19
KR_RETURN 10 20
IDN 10 6
TOCKAZAREZ 10 7
D_VIT_ZAGRADA 11 19
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_BREAK , break
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_BREAK , break
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
i : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_WHILE (4,while)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_LT (4,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
PLUS (5,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (6,if)
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
OP_EQ (6,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,3) [type=int]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_BREAK (7,break)
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
D_VIT_ZAGRADA (9,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (10,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (10,i) [symbol=i]
TOCKAZAREZ (10,;)
D_VIT_ZAGRADA (11,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-4) ; assign to i
; While loop
L_LOOP1 ; while loop start
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 5, R0 ; load constant 5
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLT L_SC_TRUE1 ; comparison OP_LT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_BREAK1 ; exit while loop
; Compound statement
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
STORE R0, (R7-4) ; assign to i
; If statement
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 3, R0 ; load constant 3
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_EQ L_SC_TRUE2 ; comparison OP_EQ
MOVE 0, R0 ; comparison result false
JP L_SC_END2
L_SC_TRUE2
MOVE 1, R0 ; comparison result true
L_SC_END2
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
; Break statement (TODO)
L_END1 ; end if
L_CONTINUE1 ; while continue
JP L_LOOP1 ; repeat while loop
L_BREAK1 ; while loop end
LOAD R0, (R7-4) ; load variable i
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 5;
return x;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 KR_RETURN return
11 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_RETURN 4 10
IDN 4 6
TOCKAZAREZ 4 7
D_VIT_ZAGRADA 5 11
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (4,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
TOCKAZAREZ (4,;)
D_VIT_ZAGRADA (5,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
i = 0;
while (i < 10) {
i = i + 1;
if (i % 2 == 0) {
continue;
}
}
return i;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 0
10 KR_WHILE while
11 OP_LT <
12 BROJ 10
13 PLUS +
14 BROJ 1
15 KR_IF if
16 OP_MOD %
17 BROJ 2
18 OP_EQ ==
19 KR_CONTINUE continue
20 D_VIT_ZAGRADA }
21 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_WHILE 4 10
L_ZAGRADA 4 2
IDN 4 6
OP_LT 4 11
BROJ 4 12
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
IDN 5 6
OP_PRIDRUZI 5 8
IDN 5 6
PLUS 5 13
BROJ 5 14
TOCKAZAREZ 5 7
KR_IF 6 15
L_ZAGRADA 6 2
IDN 6 6
OP_MOD 6 16
BROJ 6 17
OP_EQ 6 18
BROJ 6 9
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
KR_CONTINUE 7 19
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 20
D_VIT_ZAGRADA 9 20
KR_RETURN 10 21
IDN 10 6
TOCKAZAREZ 10 7
D_VIT_ZAGRADA 11 20
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_CONTINUE , continue
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_CONTINUE , continue
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
i : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_WHILE (4,while)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_LT (4,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,10) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
PLUS (5,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (6,if)
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
OP_MOD (6,%)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,2) [type=int]
OP_EQ (6,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_CONTINUE (7,continue)
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
D_VIT_ZAGRADA (9,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (10,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (10,i) [symbol=i]
TOCKAZAREZ (10,;)
D_VIT_ZAGRADA (11,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-4) ; assign to i
; While loop
L_LOOP1 ; while loop start
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 10, R0 ; load constant 10
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLT L_SC_TRUE1 ; comparison OP_LT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_BREAK1 ; exit while loop
; Compound statement
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
STORE R0, (R7-4) ; assign to i
; If statement
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 2, R0 ; load constant 2
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Modulo not implemented (TODO)
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_EQ L_SC_TRUE2 ; comparison OP_EQ
MOVE 0, R0 ; comparison result false
JP L_SC_END2
L_SC_TRUE2
MOVE 1, R0 ; comparison result true
L_SC_END2
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
; Continue statement (TODO)
L_END1 ; end if
L_CONTINUE1 ; while continue
JP L_LOOP1 ; repeat while loop
L_BREAK1 ; while loop end
LOAD R0, (R7-4) ; load variable i
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
for (i = 0; i < 10; i = i + 1) {
}
return i;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 KR_FOR for
9 OP_PRIDRUZI =
10 BROJ 0
11 OP_LT <
12 BROJ 10
13 PLUS +
14 BROJ 1
15 D_VIT_ZAGRADA }
16 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_FOR 3 8
L_ZAGRADA 3 2
IDN 3 6
OP_PRIDRUZI 3 9
BROJ 3 10
TOCKAZAREZ 3 7
IDN 3 6
OP_LT 3 11
BROJ 3 12
TOCKAZAREZ 3 7
IDN 3 6
OP_PRIDRUZI 3 9
IDN 3 6
PLUS 3 13
BROJ 3 14
D_ZAGRADA 3 4
L_VIT_ZAGRADA 3 5
D_VIT_ZAGRADA 4 15
KR_RETURN 5 16
IDN 5 6
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 15
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
i : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (3,for)
L_ZAGRADA (3,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
TOCKAZAREZ (3,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_LT (3,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,10) [type=int]
TOCKAZAREZ (3,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
PLUS (3,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,1) [type=int]
D_ZAGRADA (3,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (3,{)
D_VIT_ZAGRADA (4,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
; For loop with increment (TODO)
LOAD R0, (R7-4) ; load variable i
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
int sum;
sum = 0;
for (i = 1; i <= 10; i = i + 1) {
sum = sum + i;
}
return sum;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 IDN sum
9 OP_PRIDRUZI =
10 BROJ 0
11 KR_FOR for
12 BROJ 1
13 OP_LTE <=
14 BROJ 10
15 PLUS +
16 D_VIT_ZAGRADA }
17 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
IDN 4 8
OP_PRIDRUZI 4 9
BROJ 4 10
TOCKAZAREZ 4 7
KR_FOR 5 11
L_ZAGRADA 5 2
IDN 5 6
OP_PRIDRUZI 5 9
BROJ 5 12
TOCKAZAREZ 5 7
IDN 5 6
OP_LTE 5 13
BROJ 5 14
TOCKAZAREZ 5 7
IDN 5 6
OP_PRIDRUZI 5 9
IDN 5 6
PLUS 5 15
BROJ 5 12
D_ZAGRADA 5 4
L_VIT_ZAGRADA 5 5
IDN 6 8
OP_PRIDRUZI 6 9
IDN 6 8
PLUS 6 15
IDN 6 6
TOCKAZAREZ 6 7
D_VIT_ZAGRADA 7 16
KR_RETURN 8 17
IDN 8 8
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 16
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , sum
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LTE , <=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , sum
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LTE , <=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
i : INT
sum : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=sum, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=sum, elements=0]
IDN (3,sum) [symbol=sum]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,sum) [symbol=sum]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (5,for)
L_ZAGRADA (5,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_LTE (5,<=)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,10) [type=int]
TOCKAZAREZ (5,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
PLUS (5,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
D_ZAGRADA (5,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (5,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,sum) [symbol=sum]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,sum) [symbol=sum]
PLUS (6,+)
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
TOCKAZAREZ (6,;)
D_VIT_ZAGRADA (7,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,sum) [symbol=sum]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
; Local variable sum at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-8) ; assign to sum
; For loop with increment (TODO)
LOAD R0, (R7-8) ; load variable sum
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
for (i = 0; i < 10; i = i + 1) {
if (i == 5) {
break;
}
}
return i;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 KR_FOR for
9 OP_PRIDRUZI =
10 BROJ 0
11 OP_LT <
12 BROJ 10
13 PLUS +
14 BROJ 1
15 KR_IF if
16 OP_EQ ==
17 BROJ 5
18 KR_BREAK break
19 D_VIT_ZAGRADA }
20 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_FOR 3 8
L_ZAGRADA 3 2
IDN 3 6
OP_PRIDRUZI 3 9
BROJ 3 10
TOCKAZAREZ 3 7
IDN 3 6
OP_LT 3 11
BROJ 3 12
TOCKAZAREZ 3 7
IDN 3 6
OP_PRIDRUZI 3 9
IDN 3 6
PLUS 3 13
BROJ 3 14
D_ZAGRADA 3 4
L_VIT_ZAGRADA 3 5
KR_IF 4 15
L_ZAGRADA 4 2
IDN 4 6
OP_EQ 4 16
BROJ 4 17
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
KR_BREAK 5 18
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 19
D_VIT_ZAGRADA 7 19
KR_RETURN 8 20
IDN 8 6
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 19
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_BREAK , break
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_BREAK , break
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
i : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (3,for)
L_ZAGRADA (3,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
TOCKAZAREZ (3,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_LT (3,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,10) [type=int]
TOCKAZAREZ (3,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
PLUS (3,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,1) [type=int]
D_ZAGRADA (3,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (3,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (4,if)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_EQ (4,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_BREAK (5,break)
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
D_VIT_ZAGRADA (7,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,i) [symbol=i]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
; For loop with increment (TODO)
LOAD R0, (R7-4) ; load variable i
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
for (i = 0; i < 10; i = i + 1) {
if (i % 2 == 0) {
continue;
}
}
return i;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 KR_FOR for
9 OP_PRIDRUZI =
10 BROJ 0
11 OP_LT <
12 BROJ 10
13 PLUS +
14 BROJ 1
15 KR_IF if
16 OP_MOD %
17 BROJ 2
18 OP_EQ ==
19 KR_CONTINUE continue
20 D_VIT_ZAGRADA }
21 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_FOR 3 8
L_ZAGRADA 3 2
IDN 3 6
OP_PRIDRUZI 3 9
BROJ 3 10
TOCKAZAREZ 3 7
IDN 3 6
OP_LT 3 11
BROJ 3 12
TOCKAZAREZ 3 7
IDN 3 6
OP_PRIDRUZI 3 9
IDN 3 6
PLUS 3 13
BROJ 3 14
D_ZAGRADA 3 4
L_VIT_ZAGRADA 3 5
KR_IF 4 15
L_ZAGRADA 4 2
IDN 4 6
OP_MOD 4 16
BROJ 4 17
OP_EQ 4 18
BROJ 4 10
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
KR_CONTINUE 5 19
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 20
D_VIT_ZAGRADA 7 20
KR_RETURN 8 21
IDN 8 6
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 20
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_CONTINUE , continue
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_CONTINUE , continue
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
i : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (3,for)
L_ZAGRADA (3,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
TOCKAZAREZ (3,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_LT (3,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,10) [type=int]
TOCKAZAREZ (3,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
PLUS (3,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,1) [type=int]
D_ZAGRADA (3,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (3,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (4,if)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_MOD (4,%)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,2) [type=int]
OP_EQ (4,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_CONTINUE (5,continue)
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
D_VIT_ZAGRADA (7,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,i) [symbol=i]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
; For loop with increment (TODO)
LOAD R0, (R7-4) ; load variable i
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int add(int a, int b) {
return a + b;
}
int main(void) {
int result;
result = add(5, 3);
return result;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN add
2 L_ZAGRADA (
3 IDN a
4 ZAREZ ,
5 IDN b
6 D_ZAGRADA )
7 L_VIT_ZAGRADA {
8 KR_RETURN return
9 PLUS +
10 TOCKAZAREZ ;
11 D_VIT_ZAGRADA }
12 IDN main
13 KR_VOID void
14 IDN result
15 OP_PRIDRUZI =
16 BROJ 5
17 BROJ 3
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
ZAREZ 1 4
KR_INT 1 0
IDN 1 5
D_ZAGRADA 1 6
L_VIT_ZAGRADA 1 7
KR_RETURN 2 8
IDN 2 3
PLUS 2 9
IDN 2 5
TOCKAZAREZ 2 10
D_VIT_ZAGRADA 3 11
KR_INT 5 0
IDN 5 12
L_ZAGRADA 5 2
KR_VOID 5 13
D_ZAGRADA 5 6
L_VIT_ZAGRADA 5 7
KR_INT 6 0
IDN 6 14
TOCKAZAREZ 6 10
IDN 7 14
OP_PRIDRUZI 7 15
IDN 7 1
L_ZAGRADA 7 2
BROJ 7 16
ZAREZ 7 4
BROJ 7 17
D_ZAGRADA 7 6
TOCKAZAREZ 7 10
KR_RETURN 8 8
IDN 8 14
TOCKAZAREZ 8 10
D_VIT_ZAGRADA 9 11
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , add
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , a
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , b
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , add
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , add
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , a
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , b
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , add
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
add : INT (INT, INT) [defined]
main : INT () [defined]
Nested Scope 1:
a : INT
b : INT
Nested Scope 2:
result : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT, INT), lvalue=false, id=add, elements=0]
<<izravni_deklarator>> [type=INT(INT, INT), lvalue=false, id=add, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=add, elements=0]
IDN (1,add) [symbol=add]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=a, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=a, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=a, elements=0]
IDN (1,a) [symbol=a]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=b, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=b, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=b, elements=0]
IDN (1,b) [symbol=b]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (2,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,a) [symbol=a]
PLUS (2,+)
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,b) [symbol=b]
TOCKAZAREZ (2,;)
D_VIT_ZAGRADA (3,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (5,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (5,main) [symbol=main]
L_ZAGRADA (5,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (5,void)
D_ZAGRADA (5,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (5,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (6,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=result, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=result, elements=0]
IDN (6,result) [symbol=result]
TOCKAZAREZ (6,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,result) [symbol=result]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
IDN (7,add) [symbol=add]
L_ZAGRADA (7,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,5) [type=int]
ZAREZ (7,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,3) [type=int]
D_ZAGRADA (7,))
TOCKAZAREZ (7,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,result) [symbol=result]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_ADD ; Function add
; Parameter a at (R7+8)
; Parameter b at (R7+12)
; Compound statement
LOAD R0, (R7+8) ; load variable a
PUSH R0 ; save left operand
LOAD R0, (R7+12) ; load variable b
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from add
F_MAIN ; Function main
; Local variable result at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
; Function call: add
MOVE 3, R0 ; load constant 3
PUSH R0 ; push argument 2
MOVE 5, R0 ; load constant 5
PUSH R0 ; push argument 1
CALL F_ADD ; call add
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
STORE R0, (R7-4) ; assign to result
LOAD R0, (R7-4) ; load variable result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int multiply(int x, int y) {
return x * y;
}
int main(void) {
int a;
int b;
int product;
a = 7;
b = 6;
product = multiply(a, b);
return product;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN multiply
2 L_ZAGRADA (
3 IDN x
4 ZAREZ ,
5 IDN y
6 D_ZAGRADA )
7 L_VIT_ZAGRADA {
8 KR_RETURN return
9 ASTERISK *
10 TOCKAZAREZ ;
11 D_VIT_ZAGRADA }
12 IDN main
13 KR_VOID void
14 IDN a
15 IDN b
16 IDN product
17 OP_PRIDRUZI =
18 BROJ 7
19 BROJ 6
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
ZAREZ 1 4
KR_INT 1 0
IDN 1 5
D_ZAGRADA 1 6
L_VIT_ZAGRADA 1 7
KR_RETURN 2 8
IDN 2 3
ASTERISK 2 9
IDN 2 5
TOCKAZAREZ 2 10
D_VIT_ZAGRADA 3 11
KR_INT 5 0
IDN 5 12
L_ZAGRADA 5 2
KR_VOID 5 13
D_ZAGRADA 5 6
L_VIT_ZAGRADA 5 7
KR_INT 6 0
IDN 6 14
TOCKAZAREZ 6 10
KR_INT 7 0
IDN 7 15
TOCKAZAREZ 7 10
KR_INT 8 0
IDN 8 16
TOCKAZAREZ 8 10
IDN 9 14
OP_PRIDRUZI 9 17
BROJ 9 18
TOCKAZAREZ 9 10
IDN 10 15
OP_PRIDRUZI 10 17
BROJ 10 19
TOCKAZAREZ 10 10
IDN 11 16
OP_PRIDRUZI 11 17
IDN 11 1
L_ZAGRADA 11 2
IDN 11 14
ZAREZ 11 4
IDN 11 15
D_ZAGRADA 11 6
TOCKAZAREZ 11 10
KR_RETURN 12 8
IDN 12 16
TOCKAZAREZ 12 10
D_VIT_ZAGRADA 13 11
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , multiply
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , x
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , y
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , a
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , b
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , product
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 6
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , product
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , multiply
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , product
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , multiply
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , x
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , y
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , a
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , b
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , product
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 6
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , product
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , multiply
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , product
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
multiply : INT (INT, INT) [defined]
Nested Scope 1:
x : INT
y : INT
Nested Scope 2:
a : INT
b : INT
product : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT, INT), lvalue=false, id=multiply, elements=0]
<<izravni_deklarator>> [type=INT(INT, INT), lvalue=false, id=multiply, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=multiply, elements=0]
IDN (1,multiply) [symbol=multiply]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=x, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (1,x) [symbol=x]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=y, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (1,y) [symbol=y]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (2,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,x) [symbol=x]
ASTERISK (2,*)
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,y) [symbol=y]
TOCKAZAREZ (2,;)
D_VIT_ZAGRADA (3,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (5,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (5,main) [symbol=main]
L_ZAGRADA (5,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (5,void)
D_ZAGRADA (5,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (5,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (6,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=a, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=a, elements=0]
IDN (6,a) [symbol=a]
TOCKAZAREZ (6,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (7,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=b, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=b, elements=0]
IDN (7,b) [symbol=b]
TOCKAZAREZ (7,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (8,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=product, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=product, elements=0]
IDN (8,product) [symbol=product]
TOCKAZAREZ (8,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (9,a) [symbol=a]
OP_PRIDRUZI (9,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,7) [type=int]
TOCKAZAREZ (9,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (10,b) [symbol=b]
OP_PRIDRUZI (10,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (10,6) [type=int]
TOCKAZAREZ (10,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (11,product) [symbol=product]
OP_PRIDRUZI (11,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
IDN (11,multiply) [symbol=multiply]
L_ZAGRADA (11,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (11,a) [symbol=a]
ZAREZ (11,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (11,b) [symbol=b]
D_ZAGRADA (11,))
TOCKAZAREZ (11,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (12,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (12,product) [symbol=product]
TOCKAZAREZ (12,;)
D_VIT_ZAGRADA (13,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MULTIPLY ; Function multiply
; Parameter x at (R7+8)
; Parameter y at (R7+12)
; Compound statement
LOAD R0, (R7+8) ; load variable x
PUSH R0 ; save left operand
LOAD R0, (R7+12) ; load variable y
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Multiplication: R0 * R1
CMP R1, 0
JP_EQ L_BREAK1 ; if multiplier is 0
MOVE R0, R2 ; save multiplicand
MOVE R1, R3 ; save multiplier
MOVE 0, R0 ; initialize result
L_LOOP1 ; multiplication loop
ADD R0, R2, R0 ; add multiplicand to result
SUB R3, 1, R3 ; decrement multiplier
CMP R3, 0
JP_GT L_LOOP1 ; repeat if multiplier > 0
L_BREAK1 ; multiplication done
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from multiply
F_MAIN ; Function main
; Local variable a at (R7-4)
; Local variable b at (R7-8)
; Local variable product at (R7-12)
SUB R7, 12, R7 ; allocate 3 local variables
; Compound statement
; Local declarations (TODO)
MOVE 7, R0 ; load constant 7
STORE R0, (R7-4) ; assign to a
MOVE 6, R0 ; load constant 6
STORE R0, (R7-8) ; assign to b
; Function call: multiply
LOAD R0, (R7-8) ; load variable b
PUSH R0 ; push argument 2
LOAD R0, (R7-4) ; load variable a
PUSH R0 ; push argument 1
CALL F_MULTIPLY ; call multiply
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
STORE R0, (R7-12) ; assign to product
LOAD R0, (R7-12) ; load variable product
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 12, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
void print_hello(void) {
return;
}
int main(void) {
print_hello();
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_VOID void
1 IDN print_hello
2 L_ZAGRADA (
3 D_ZAGRADA )
4 L_VIT_ZAGRADA {
5 KR_RETURN return
6 TOCKAZAREZ ;
7 D_VIT_ZAGRADA }
8 KR_INT int
9 IDN main
10 BROJ 0
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_VOID 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 0
D_ZAGRADA 1 3
L_VIT_ZAGRADA 1 4
KR_RETURN 2 5
TOCKAZAREZ 2 6
D_VIT_ZAGRADA 3 7
KR_INT 5 8
IDN 5 9
L_ZAGRADA 5 2
KR_VOID 5 0
D_ZAGRADA 5 3
L_VIT_ZAGRADA 5 4
IDN 6 1
L_ZAGRADA 6 2
D_ZAGRADA 6 3
TOCKAZAREZ 6 6
KR_RETURN 7 5
BROJ 7 10
TOCKAZAREZ 7 6
D_VIT_ZAGRADA 8 7
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , print_hello
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , print_hello
L_ZAGRADA , (
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_VOID , void
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , print_hello
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , print_hello
L_ZAGRADA , (
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
print_hello : VOID () [defined]
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
<<deklarator>> [type=VOID(), lvalue=false, id=print_hello, elements=0]
<<izravni_deklarator>> [type=VOID(), lvalue=false, id=print_hello, elements=0]
<<izravni_deklarator>> [type=VOID, lvalue=true, id=print_hello, elements=0]
IDN (1,print_hello) [symbol=print_hello]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (2,return)
TOCKAZAREZ (2,;)
D_VIT_ZAGRADA (3,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (5,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (5,main) [symbol=main]
L_ZAGRADA (5,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (5,void)
D_ZAGRADA (5,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (5,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=VOID, lvalue=false, elements=0]
<<izraz>> [type=VOID, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=VOID, lvalue=false, elements=0]
<<log_ili_izraz>> [type=VOID, lvalue=false, elements=0]
<<log_i_izraz>> [type=VOID, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=VOID, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=VOID, lvalue=false, elements=0]
<<bin_i_izraz>> [type=VOID, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=VOID, lvalue=false, elements=0]
<<odnosni_izraz>> [type=VOID, lvalue=false, elements=0]
<<aditivni_izraz>> [type=VOID, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=VOID, lvalue=false, elements=0]
<<cast_izraz>> [type=VOID, lvalue=false, elements=0]
<<unarni_izraz>> [type=VOID, lvalue=false, elements=0]
<<postfiks_izraz>> [type=VOID, lvalue=false, elements=0]
<<postfiks_izraz>> [type=VOID(), lvalue=false, elements=0]
<<primarni_izraz>> [type=VOID(), lvalue=false, elements=0]
IDN (6,print_hello) [symbol=print_hello]
L_ZAGRADA (6,()
D_ZAGRADA (6,))
TOCKAZAREZ (6,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,0) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_PRINT_HELLO ; Function print_hello
; Compound statement
MOVE 0, R6 ; void return
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from print_hello
F_MAIN ; Function main
; Compound statement
; Function call: print_hello
CALL F_PRINT_HELLO ; call print_hello
MOVE R6, R0 ; function result
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int square(int x) {
return x * x;
}
int main(void) {
int n;
int result;
n = 5;
result = square(n);
return result;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN square
2 L_ZAGRADA (
3 IDN x
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 KR_RETURN return
7 ASTERISK *
8 TOCKAZAREZ ;
9 D_VIT_ZAGRADA }
10 IDN main
11 KR_VOID void
12 IDN n
13 IDN result
14 OP_PRIDRUZI =
15 BROJ 5
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_RETURN 2 6
IDN 2 3
ASTERISK 2 7
IDN 2 3
TOCKAZAREZ 2 8
D_VIT_ZAGRADA 3 9
KR_INT 5 0
IDN 5 10
L_ZAGRADA 5 2
KR_VOID 5 11
D_ZAGRADA 5 4
L_VIT_ZAGRADA 5 5
KR_INT 6 0
IDN 6 12
TOCKAZAREZ 6 8
KR_INT 7 0
IDN 7 13
TOCKAZAREZ 7 8
IDN 8 12
OP_PRIDRUZI 8 14
BROJ 8 15
TOCKAZAREZ 8 8
IDN 9 13
OP_PRIDRUZI 9 14
IDN 9 1
L_ZAGRADA 9 2
IDN 9 12
D_ZAGRADA 9 4
TOCKAZAREZ 9 8
KR_RETURN 10 6
IDN 10 13
TOCKAZAREZ 10 8
D_VIT_ZAGRADA 11 9
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , square
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , x
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , n
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , square
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , square
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , x
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , n
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , square
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
square : INT (INT) [defined]
Nested Scope 1:
x : INT
Nested Scope 2:
n : INT
result : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT), lvalue=false, id=square, elements=0]
<<izravni_deklarator>> [type=INT(INT), lvalue=false, id=square, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=square, elements=0]
IDN (1,square) [symbol=square]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=x, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (1,x) [symbol=x]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (2,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,x) [symbol=x]
ASTERISK (2,*)
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
D_VIT_ZAGRADA (3,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (5,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (5,main) [symbol=main]
L_ZAGRADA (5,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (5,void)
D_ZAGRADA (5,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (5,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (6,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=n, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=n, elements=0]
IDN (6,n) [symbol=n]
TOCKAZAREZ (6,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (7,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=result, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=result, elements=0]
IDN (7,result) [symbol=result]
TOCKAZAREZ (7,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,n) [symbol=n]
OP_PRIDRUZI (8,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (8,5) [type=int]
TOCKAZAREZ (8,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (9,result) [symbol=result]
OP_PRIDRUZI (9,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT), lvalue=false, elements=0]
IDN (9,square) [symbol=square]
L_ZAGRADA (9,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (9,n) [symbol=n]
D_ZAGRADA (9,))
TOCKAZAREZ (9,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (10,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (10,result) [symbol=result]
TOCKAZAREZ (10,;)
D_VIT_ZAGRADA (11,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_SQUARE ; Function square
; Parameter x at (R7+8)
; Compound statement
LOAD R0, (R7+8) ; load variable x
PUSH R0 ; save left operand
LOAD R0, (R7+8) ; load variable x
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Multiplication: R0 * R1
CMP R1, 0
JP_EQ L_BREAK1 ; if multiplier is 0
MOVE R0, R2 ; save multiplicand
MOVE R1, R3 ; save multiplier
MOVE 0, R0 ; initialize result
L_LOOP1 ; multiplication loop
ADD R0, R2, R0 ; add multiplicand to result
SUB R3, 1, R3 ; decrement multiplier
CMP R3, 0
JP_GT L_LOOP1 ; repeat if multiplier > 0
L_BREAK1 ; multiplication done
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from square
F_MAIN ; Function main
; Local variable n at (R7-4)
; Local variable result at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to n
; Function call: square
LOAD R0, (R7-4) ; load variable n
PUSH R0 ; push argument 1
CALL F_SQUARE ; call square
ADD R7, 4, R7 ; cleanup 1 arguments
MOVE R6, R0 ; function result
STORE R0, (R7-8) ; assign to result
LOAD R0, (R7-8) ; load variable result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int max(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
int main(void) {
int x;
int y;
int m;
x = 10;
y = 20;
m = max(x, y);
return m;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN max
2 L_ZAGRADA (
3 IDN a
4 ZAREZ ,
5 IDN b
6 D_ZAGRADA )
7 L_VIT_ZAGRADA {
8 KR_IF if
9 OP_GT >
10 KR_RETURN return
11 TOCKAZAREZ ;
12 D_VIT_ZAGRADA }
13 KR_ELSE else
14 IDN main
15 KR_VOID void
16 IDN x
17 IDN y
18 IDN m
19 OP_PRIDRUZI =
20 BROJ 10
21 BROJ 20
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
ZAREZ 1 4
KR_INT 1 0
IDN 1 5
D_ZAGRADA 1 6
L_VIT_ZAGRADA 1 7
KR_IF 2 8
L_ZAGRADA 2 2
IDN 2 3
OP_GT 2 9
IDN 2 5
D_ZAGRADA 2 6
L_VIT_ZAGRADA 2 7
KR_RETURN 3 10
IDN 3 3
TOCKAZAREZ 3 11
D_VIT_ZAGRADA 4 12
KR_ELSE 4 13
L_VIT_ZAGRADA 4 7
KR_RETURN 5 10
IDN 5 5
TOCKAZAREZ 5 11
D_VIT_ZAGRADA 6 12
D_VIT_ZAGRADA 7 12
KR_INT 9 0
IDN 9 14
L_ZAGRADA 9 2
KR_VOID 9 15
D_ZAGRADA 9 6
L_VIT_ZAGRADA 9 7
KR_INT 10 0
IDN 10 16
TOCKAZAREZ 10 11
KR_INT 11 0
IDN 11 17
TOCKAZAREZ 11 11
KR_INT 12 0
IDN 12 18
TOCKAZAREZ 12 11
IDN 13 16
OP_PRIDRUZI 13 19
BROJ 13 20
TOCKAZAREZ 13 11
IDN 14 17
OP_PRIDRUZI 14 19
BROJ 14 21
TOCKAZAREZ 14 11
IDN 15 18
OP_PRIDRUZI 15 19
IDN 15 1
L_ZAGRADA 15 2
IDN 15 16
ZAREZ 15 4
IDN 15 17
D_ZAGRADA 15 6
TOCKAZAREZ 15 11
KR_RETURN 16 10
IDN 16 18
TOCKAZAREZ 16 11
D_VIT_ZAGRADA 17 12
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , max
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , a
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , b
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
KR_ELSE , else
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , m
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , m
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , max
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , m
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , max
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , a
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , b
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
KR_ELSE , else
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , m
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , m
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , max
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , m
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
max : INT (INT, INT) [defined]
Nested Scope 1:
a : INT
b : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
Nested Scope 2:
m : INT
x : INT
y : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT, INT), lvalue=false, id=max, elements=0]
<<izravni_deklarator>> [type=INT(INT, INT), lvalue=false, id=max, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=max, elements=0]
IDN (1,max) [symbol=max]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=a, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=a, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=a, elements=0]
IDN (1,a) [symbol=a]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=b, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=b, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=b, elements=0]
IDN (1,b) [symbol=b]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (2,if)
L_ZAGRADA (2,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,a) [symbol=a]
OP_GT (2,>)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,b) [symbol=b]
D_ZAGRADA (2,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (2,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (3,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,a) [symbol=a]
TOCKAZAREZ (3,;)
D_VIT_ZAGRADA (4,})
KR_ELSE (4,else)
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,b) [symbol=b]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
D_VIT_ZAGRADA (7,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (9,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (9,main) [symbol=main]
L_ZAGRADA (9,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (9,void)
D_ZAGRADA (9,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (9,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (10,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (10,x) [symbol=x]
TOCKAZAREZ (10,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (11,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (11,y) [symbol=y]
TOCKAZAREZ (11,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (12,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=m, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=m, elements=0]
IDN (12,m) [symbol=m]
TOCKAZAREZ (12,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (13,x) [symbol=x]
OP_PRIDRUZI (13,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (13,10) [type=int]
TOCKAZAREZ (13,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (14,y) [symbol=y]
OP_PRIDRUZI (14,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (14,20) [type=int]
TOCKAZAREZ (14,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (15,m) [symbol=m]
OP_PRIDRUZI (15,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
IDN (15,max) [symbol=max]
L_ZAGRADA (15,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (15,x) [symbol=x]
ZAREZ (15,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (15,y) [symbol=y]
D_ZAGRADA (15,))
TOCKAZAREZ (15,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (16,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (16,m) [symbol=m]
TOCKAZAREZ (16,;)
D_VIT_ZAGRADA (17,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAX ; Function max
; Parameter a at (R7+8)
; Parameter b at (R7+12)
; Compound statement
; If-else statement
LOAD R0, (R7+8) ; load variable a
PUSH R0 ; save left operand
LOAD R0, (R7+12) ; load variable b
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE1 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_ELSE1 ; if condition is false
; Compound statement
LOAD R0, (R7+8) ; load variable a
MOVE R0, R6 ; return value
RET ; return from function
JP L_END1 ; skip else
L_ELSE1 ; else clause
; Compound statement
LOAD R0, (R7+12) ; load variable b
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if-else
MOVE 0, R6 ; default return value
RET ; return from max
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
; Local variable m at (R7-12)
SUB R7, 12, R7 ; allocate 3 local variables
; Compound statement
; Local declarations (TODO)
MOVE 10, R0 ; load constant 10
STORE R0, (R7-4) ; assign to x
MOVE 20, R0 ; load constant 20
STORE R0, (R7-8) ; assign to y
; Function call: max
LOAD R0, (R7-8) ; load variable y
PUSH R0 ; push argument 2
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; push argument 1
CALL F_MAX ; call max
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
STORE R0, (R7-12) ; assign to m
LOAD R0, (R7-12) ; load variable m
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 12, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int a;
int b;
int sum;
a = 10;
b = 20;
sum = a + b;
return sum;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN a
7 TOCKAZAREZ ;
8 IDN b
9 IDN sum
10 OP_PRIDRUZI =
11 BROJ 10
12 BROJ 20
13 PLUS +
14 KR_RETURN return
15 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
KR_INT 4 0
IDN 4 9
TOCKAZAREZ 4 7
IDN 5 6
OP_PRIDRUZI 5 10
BROJ 5 11
TOCKAZAREZ 5 7
IDN 6 8
OP_PRIDRUZI 6 10
BROJ 6 12
TOCKAZAREZ 6 7
IDN 7 9
OP_PRIDRUZI 7 10
IDN 7 6
PLUS 7 13
IDN 7 8
TOCKAZAREZ 7 7
KR_RETURN 8 14
IDN 8 9
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 15
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , a
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , b
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , sum
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , a
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , b
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , sum
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
a : INT
b : INT
sum : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=a, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=a, elements=0]
IDN (2,a) [symbol=a]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=b, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=b, elements=0]
IDN (3,b) [symbol=b]
TOCKAZAREZ (3,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (4,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=sum, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=sum, elements=0]
IDN (4,sum) [symbol=sum]
TOCKAZAREZ (4,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,a) [symbol=a]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,10) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,b) [symbol=b]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,20) [type=int]
TOCKAZAREZ (6,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,sum) [symbol=sum]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,a) [symbol=a]
PLUS (7,+)
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,b) [symbol=b]
TOCKAZAREZ (7,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,sum) [symbol=sum]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable a at (R7-4)
; Local variable b at (R7-8)
; Local variable sum at (R7-12)
SUB R7, 12, R7 ; allocate 3 local variables
; Compound statement
; Local declarations (TODO)
MOVE 10, R0 ; load constant 10
STORE R0, (R7-4) ; assign to a
MOVE 20, R0 ; load constant 20
STORE R0, (R7-8) ; assign to b
LOAD R0, (R7-4) ; load variable a
PUSH R0 ; save left operand
LOAD R0, (R7-8) ; load variable b
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
STORE R0, (R7-12) ; assign to sum
LOAD R0, (R7-12) ; load variable sum
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 12, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int min(int a, int b) {
if (a < b) {
return a;
}
return b;
}
int main(void) {
return min(15, 8);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN min
2 L_ZAGRADA (
3 IDN a
4 ZAREZ ,
5 IDN b
6 D_ZAGRADA )
7 L_VIT_ZAGRADA {
8 KR_IF if
9 OP_LT <
10 KR_RETURN return
11 TOCKAZAREZ ;
12 D_VIT_ZAGRADA }
13 IDN main
14 KR_VOID void
15 BROJ 15
16 BROJ 8
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
ZAREZ 1 4
KR_INT 1 0
IDN 1 5
D_ZAGRADA 1 6
L_VIT_ZAGRADA 1 7
KR_IF 2 8
L_ZAGRADA 2 2
IDN 2 3
OP_LT 2 9
IDN 2 5
D_ZAGRADA 2 6
L_VIT_ZAGRADA 2 7
KR_RETURN 3 10
IDN 3 3
TOCKAZAREZ 3 11
D_VIT_ZAGRADA 4 12
KR_RETURN 5 10
IDN 5 5
TOCKAZAREZ 5 11
D_VIT_ZAGRADA 6 12
KR_INT 8 0
IDN 8 13
L_ZAGRADA 8 2
KR_VOID 8 14
D_ZAGRADA 8 6
L_VIT_ZAGRADA 8 7
KR_RETURN 9 10
IDN 9 1
L_ZAGRADA 9 2
BROJ 9 15
ZAREZ 9 4
BROJ 9 16
D_ZAGRADA 9 6
TOCKAZAREZ 9 11
D_VIT_ZAGRADA 10 12
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , min
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , a
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , b
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , min
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 15
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 8
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , min
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , a
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , b
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , min
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 15
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 8
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
min : INT (INT, INT) [defined]
Nested Scope 1:
a : INT
b : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT, INT), lvalue=false, id=min, elements=0]
<<izravni_deklarator>> [type=INT(INT, INT), lvalue=false, id=min, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=min, elements=0]
IDN (1,min) [symbol=min]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=a, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=a, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=a, elements=0]
IDN (1,a) [symbol=a]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=b, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=b, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=b, elements=0]
IDN (1,b) [symbol=b]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (2,if)
L_ZAGRADA (2,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,a) [symbol=a]
OP_LT (2,<)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,b) [symbol=b]
D_ZAGRADA (2,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (2,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (3,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,a) [symbol=a]
TOCKAZAREZ (3,;)
D_VIT_ZAGRADA (4,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,b) [symbol=b]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (8,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (8,main) [symbol=main]
L_ZAGRADA (8,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (8,void)
D_ZAGRADA (8,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (8,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (9,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
IDN (9,min) [symbol=min]
L_ZAGRADA (9,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,15) [type=int]
ZAREZ (9,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,8) [type=int]
D_ZAGRADA (9,))
TOCKAZAREZ (9,;)
D_VIT_ZAGRADA (10,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MIN ; Function min
; Parameter a at (R7+8)
; Parameter b at (R7+12)
; Compound statement
; If statement
LOAD R0, (R7+8) ; load variable a
PUSH R0 ; save left operand
LOAD R0, (R7+12) ; load variable b
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLT L_SC_TRUE1 ; comparison OP_LT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
LOAD R0, (R7+8) ; load variable a
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
LOAD R0, (R7+12) ; load variable b
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from min
F_MAIN ; Function main
; Compound statement
; Function call: min
MOVE 8, R0 ; load constant 8
PUSH R0 ; push argument 2
MOVE 15, R0 ; load constant 15
PUSH R0 ; push argument 1
CALL F_MIN ; call min
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
char get_char(void) {
return 'a';
}
int main(void) {
char c;
c = get_char();
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_CHAR char
1 IDN get_char
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 KR_RETURN return
7 ZNAK 'a'
8 TOCKAZAREZ ;
9 D_VIT_ZAGRADA }
10 KR_INT int
11 IDN main
12 IDN c
13 OP_PRIDRUZI =
14 BROJ 0
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_CHAR 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_RETURN 2 6
ZNAK 2 7
TOCKAZAREZ 2 8
D_VIT_ZAGRADA 3 9
KR_INT 5 10
IDN 5 11
L_ZAGRADA 5 2
KR_VOID 5 3
D_ZAGRADA 5 4
L_VIT_ZAGRADA 5 5
KR_CHAR 6 0
IDN 6 12
TOCKAZAREZ 6 8
IDN 7 12
OP_PRIDRUZI 7 13
IDN 7 1
L_ZAGRADA 7 2
D_ZAGRADA 7 4
TOCKAZAREZ 7 8
KR_RETURN 8 6
BROJ 8 14
TOCKAZAREZ 8 8
D_VIT_ZAGRADA 9 9
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_CHAR , char
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , get_char
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
ZNAK , 'a'
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_CHAR , char
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , c
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , get_char
L_ZAGRADA , (
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_CHAR , char
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , get_char
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
ZNAK , 'a'
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_CHAR , char
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , c
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , get_char
L_ZAGRADA , (
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
get_char : CHAR () [defined]
main : INT () [defined]
Nested Scope 1:
(no symbols)
Nested Scope 2:
c : CHAR
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=CHAR, lvalue=false, elements=0]
<<specifikator_tipa>> [type=CHAR, lvalue=false, elements=0]
KR_CHAR (1,char)
<<deklarator>> [type=CHAR(), lvalue=false, id=get_char, elements=0]
<<izravni_deklarator>> [type=CHAR(), lvalue=false, id=get_char, elements=0]
<<izravni_deklarator>> [type=CHAR, lvalue=true, id=get_char, elements=0]
IDN (1,get_char) [symbol=get_char]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (2,return)
<<izraz>> [type=CHAR, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=CHAR, lvalue=false, elements=0]
<<log_ili_izraz>> [type=CHAR, lvalue=false, elements=0]
<<log_i_izraz>> [type=CHAR, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=CHAR, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=CHAR, lvalue=false, elements=0]
<<bin_i_izraz>> [type=CHAR, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<odnosni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<aditivni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<cast_izraz>> [type=CHAR, lvalue=false, elements=0]
<<unarni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<postfiks_izraz>> [type=CHAR, lvalue=false, elements=0]
<<primarni_izraz>> [type=CHAR, lvalue=false, elements=0]
ZNAK (2,'a') [type=char]
TOCKAZAREZ (2,;)
D_VIT_ZAGRADA (3,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (5,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (5,main) [symbol=main]
L_ZAGRADA (5,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (5,void)
D_ZAGRADA (5,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (5,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=CHAR, lvalue=false, elements=0]
<<specifikator_tipa>> [type=CHAR, lvalue=false, elements=0]
KR_CHAR (6,char)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=CHAR, lvalue=true, id=c, elements=0]
<<izravni_deklarator>> [type=CHAR, lvalue=true, id=c, elements=0]
IDN (6,c) [symbol=c]
TOCKAZAREZ (6,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=CHAR, lvalue=false, elements=0]
<<izraz>> [type=CHAR, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=CHAR, lvalue=false, elements=0]
<<unarni_izraz>> [type=CHAR, lvalue=true, elements=0]
<<postfiks_izraz>> [type=CHAR, lvalue=true, elements=0]
<<primarni_izraz>> [type=CHAR, lvalue=true, elements=0]
IDN (7,c) [symbol=c]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=CHAR, lvalue=false, elements=0]
<<log_ili_izraz>> [type=CHAR, lvalue=false, elements=0]
<<log_i_izraz>> [type=CHAR, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=CHAR, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=CHAR, lvalue=false, elements=0]
<<bin_i_izraz>> [type=CHAR, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<odnosni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<aditivni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<cast_izraz>> [type=CHAR, lvalue=false, elements=0]
<<unarni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<postfiks_izraz>> [type=CHAR, lvalue=false, elements=0]
<<postfiks_izraz>> [type=CHAR(), lvalue=false, elements=0]
<<primarni_izraz>> [type=CHAR(), lvalue=false, elements=0]
IDN (7,get_char) [symbol=get_char]
L_ZAGRADA (7,()
D_ZAGRADA (7,))
TOCKAZAREZ (7,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (8,0) [type=int]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_GET_CHAR ; Function get_char
; Compound statement
MOVE 97, R0 ; load char ''a''
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from get_char
F_MAIN ; Function main
; Local variable c at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
; Function call: get_char
CALL F_GET_CHAR ; call get_char
MOVE R6, R0 ; function result
STORE R0, (R7-4) ; assign to c
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
float get_float(void) {
return 3.14;
}
int main(void) {
float f;
f = get_float();
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_FLOAT float
1 IDN get_float
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 KR_RETURN return
7 BROJ 3.14
8 TOCKAZAREZ ;
9 D_VIT_ZAGRADA }
10 KR_INT int
11 IDN main
12 IDN f
13 OP_PRIDRUZI =
14 BROJ 0
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_FLOAT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_RETURN 2 6
BROJ 2 7
TOCKAZAREZ 2 8
D_VIT_ZAGRADA 3 9
KR_INT 5 10
IDN 5 11
L_ZAGRADA 5 2
KR_VOID 5 3
D_ZAGRADA 5 4
L_VIT_ZAGRADA 5 5
KR_FLOAT 6 0
IDN 6 12
TOCKAZAREZ 6 8
IDN 7 12
OP_PRIDRUZI 7 13
IDN 7 1
L_ZAGRADA 7 2
D_ZAGRADA 7 4
TOCKAZAREZ 7 8
KR_RETURN 8 6
BROJ 8 14
TOCKAZAREZ 8 8
D_VIT_ZAGRADA 9 9
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_FLOAT , float
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , get_float
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3.14
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_FLOAT , float
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , f
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , f
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , get_float
L_ZAGRADA , (
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_FLOAT , float
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , get_float
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3.14
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_FLOAT , float
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , f
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , f
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , get_float
L_ZAGRADA , (
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<specifikator_tipa> ::= KR_FLOAT(1,float)
SEMANTIC ERRORS:
semantic error
int factorial(int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
int main(void) {
int result;
result = factorial(5);
return result;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN factorial
2 L_ZAGRADA (
3 IDN n
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 KR_IF if
7 OP_LTE <=
8 BROJ 1
9 KR_RETURN return
10 TOCKAZAREZ ;
11 D_VIT_ZAGRADA }
12 ASTERISK *
13 MINUS -
14 IDN main
15 KR_VOID void
16 IDN result
17 OP_PRIDRUZI =
18 BROJ 5
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_IF 2 6
L_ZAGRADA 2 2
IDN 2 3
OP_LTE 2 7
BROJ 2 8
D_ZAGRADA 2 4
L_VIT_ZAGRADA 2 5
KR_RETURN 3 9
BROJ 3 8
TOCKAZAREZ 3 10
D_VIT_ZAGRADA 4 11
KR_RETURN 5 9
IDN 5 3
ASTERISK 5 12
IDN 5 1
L_ZAGRADA 5 2
IDN 5 3
MINUS 5 13
BROJ 5 8
D_ZAGRADA 5 4
TOCKAZAREZ 5 10
D_VIT_ZAGRADA 6 11
KR_INT 8 0
IDN 8 14
L_ZAGRADA 8 2
KR_VOID 8 15
D_ZAGRADA 8 4
L_VIT_ZAGRADA 8 5
KR_INT 9 0
IDN 9 16
TOCKAZAREZ 9 10
IDN 10 16
OP_PRIDRUZI 10 17
IDN 10 1
L_ZAGRADA 10 2
BROJ 10 18
D_ZAGRADA 10 4
TOCKAZAREZ 10 10
KR_RETURN 11 9
IDN 11 16
TOCKAZAREZ 11 10
D_VIT_ZAGRADA 12 11
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , factorial
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_LTE , <=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , factorial
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , factorial
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , factorial
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_LTE , <=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , factorial
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , factorial
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
factorial : INT (INT) [defined]
main : INT () [defined]
Nested Scope 1:
n : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
result : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT), lvalue=false, id=factorial, elements=0]
<<izravni_deklarator>> [type=INT(INT), lvalue=false, id=factorial, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=factorial, elements=0]
IDN (1,factorial) [symbol=factorial]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=n, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=n, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=n, elements=0]
IDN (1,n) [symbol=n]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (2,if)
L_ZAGRADA (2,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,n) [symbol=n]
OP_LTE (2,<=)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (2,1) [type=int]
D_ZAGRADA (2,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (2,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (3,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,1) [type=int]
TOCKAZAREZ (3,;)
D_VIT_ZAGRADA (4,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,n) [symbol=n]
ASTERISK (5,*)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT), lvalue=false, elements=0]
IDN (5,factorial) [symbol=factorial]
L_ZAGRADA (5,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,n) [symbol=n]
MINUS (5,-)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
D_ZAGRADA (5,))
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (8,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (8,main) [symbol=main]
L_ZAGRADA (8,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (8,void)
D_ZAGRADA (8,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (8,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (9,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=result, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=result, elements=0]
IDN (9,result) [symbol=result]
TOCKAZAREZ (9,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (10,result) [symbol=result]
OP_PRIDRUZI (10,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT), lvalue=false, elements=0]
IDN (10,factorial) [symbol=factorial]
L_ZAGRADA (10,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (10,5) [type=int]
D_ZAGRADA (10,))
TOCKAZAREZ (10,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (11,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (11,result) [symbol=result]
TOCKAZAREZ (11,;)
D_VIT_ZAGRADA (12,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_FACTORIAL ; Function factorial
; Parameter n at (R7+8)
; Compound statement
; If statement
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLE L_SC_TRUE1 ; comparison OP_LTE
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
; Function call: factorial
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
SUB R0, R1, R0 ; subtraction
PUSH R0 ; push argument 1
CALL F_FACTORIAL ; call factorial
ADD R7, 4, R7 ; cleanup 1 arguments
MOVE R6, R0 ; function result
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Multiplication: R0 * R1
CMP R1, 0
JP_EQ L_BREAK1 ; if multiplier is 0
MOVE R0, R2 ; save multiplicand
MOVE R1, R3 ; save multiplier
MOVE 0, R0 ; initialize result
L_LOOP1 ; multiplication loop
ADD R0, R2, R0 ; add multiplicand to result
SUB R3, 1, R3 ; decrement multiplier
CMP R3, 0
JP_GT L_LOOP1 ; repeat if multiplier > 0
L_BREAK1 ; multiplication done
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from factorial
F_MAIN ; Function main
; Local variable result at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
; Function call: factorial
MOVE 5, R0 ; load constant 5
PUSH R0 ; push argument 1
CALL F_FACTORIAL ; call factorial
ADD R7, 4, R7 ; cleanup 1 arguments
MOVE R6, R0 ; function result
STORE R0, (R7-4) ; assign to result
LOAD R0, (R7-4) ; load variable result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int fibonacci(int n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main(void) {
int result;
result = fibonacci(6);
return result;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN fibonacci
2 L_ZAGRADA (
3 IDN n
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 KR_IF if
7 OP_LTE <=
8 BROJ 1
9 KR_RETURN return
10 TOCKAZAREZ ;
11 D_VIT_ZAGRADA }
12 MINUS -
13 PLUS +
14 BROJ 2
15 IDN main
16 KR_VOID void
17 IDN result
18 OP_PRIDRUZI =
19 BROJ 6
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_IF 2 6
L_ZAGRADA 2 2
IDN 2 3
OP_LTE 2 7
BROJ 2 8
D_ZAGRADA 2 4
L_VIT_ZAGRADA 2 5
KR_RETURN 3 9
IDN 3 3
TOCKAZAREZ 3 10
D_VIT_ZAGRADA 4 11
KR_RETURN 5 9
IDN 5 1
L_ZAGRADA 5 2
IDN 5 3
MINUS 5 12
BROJ 5 8
D_ZAGRADA 5 4
PLUS 5 13
IDN 5 1
L_ZAGRADA 5 2
IDN 5 3
MINUS 5 12
BROJ 5 14
D_ZAGRADA 5 4
TOCKAZAREZ 5 10
D_VIT_ZAGRADA 6 11
KR_INT 8 0
IDN 8 15
L_ZAGRADA 8 2
KR_VOID 8 16
D_ZAGRADA 8 4
L_VIT_ZAGRADA 8 5
KR_INT 9 0
IDN 9 17
TOCKAZAREZ 9 10
IDN 10 17
OP_PRIDRUZI 10 18
IDN 10 1
L_ZAGRADA 10 2
BROJ 10 19
D_ZAGRADA 10 4
TOCKAZAREZ 10 10
KR_RETURN 11 9
IDN 11 17
TOCKAZAREZ 11 10
D_VIT_ZAGRADA 12 11
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , fibonacci
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_LTE , <=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , fibonacci
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , fibonacci
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , fibonacci
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 6
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , fibonacci
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_LTE , <=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , fibonacci
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , fibonacci
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , fibonacci
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 6
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
fibonacci : INT (INT) [defined]
main : INT () [defined]
Nested Scope 1:
n : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
result : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT), lvalue=false, id=fibonacci, elements=0]
<<izravni_deklarator>> [type=INT(INT), lvalue=false, id=fibonacci, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=fibonacci, elements=0]
IDN (1,fibonacci) [symbol=fibonacci]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=n, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=n, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=n, elements=0]
IDN (1,n) [symbol=n]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (2,if)
L_ZAGRADA (2,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,n) [symbol=n]
OP_LTE (2,<=)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (2,1) [type=int]
D_ZAGRADA (2,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (2,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (3,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,n) [symbol=n]
TOCKAZAREZ (3,;)
D_VIT_ZAGRADA (4,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT), lvalue=false, elements=0]
IDN (5,fibonacci) [symbol=fibonacci]
L_ZAGRADA (5,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,n) [symbol=n]
MINUS (5,-)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
D_ZAGRADA (5,))
PLUS (5,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT), lvalue=false, elements=0]
IDN (5,fibonacci) [symbol=fibonacci]
L_ZAGRADA (5,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,n) [symbol=n]
MINUS (5,-)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,2) [type=int]
D_ZAGRADA (5,))
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (8,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (8,main) [symbol=main]
L_ZAGRADA (8,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (8,void)
D_ZAGRADA (8,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (8,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (9,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=result, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=result, elements=0]
IDN (9,result) [symbol=result]
TOCKAZAREZ (9,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (10,result) [symbol=result]
OP_PRIDRUZI (10,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT), lvalue=false, elements=0]
IDN (10,fibonacci) [symbol=fibonacci]
L_ZAGRADA (10,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (10,6) [type=int]
D_ZAGRADA (10,))
TOCKAZAREZ (10,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (11,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (11,result) [symbol=result]
TOCKAZAREZ (11,;)
D_VIT_ZAGRADA (12,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_FIBONACCI ; Function fibonacci
; Parameter n at (R7+8)
; Compound statement
; If statement
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLE L_SC_TRUE1 ; comparison OP_LTE
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
LOAD R0, (R7+8) ; load variable n
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
; Function call: fibonacci
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
SUB R0, R1, R0 ; subtraction
PUSH R0 ; push argument 1
CALL F_FIBONACCI ; call fibonacci
ADD R7, 4, R7 ; cleanup 1 arguments
MOVE R6, R0 ; function result
PUSH R0 ; save left operand
; Function call: fibonacci
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
MOVE 2, R0 ; load constant 2
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
SUB R0, R1, R0 ; subtraction
PUSH R0 ; push argument 1
CALL F_FIBONACCI ; call fibonacci
ADD R7, 4, R7 ; cleanup 1 arguments
MOVE R6, R0 ; function result
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from fibonacci
F_MAIN ; Function main
; Local variable result at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
; Function call: fibonacci
MOVE 6, R0 ; load constant 6
PUSH R0 ; push argument 1
CALL F_FIBONACCI ; call fibonacci
ADD R7, 4, R7 ; cleanup 1 arguments
MOVE R6, R0 ; function result
STORE R0, (R7-4) ; assign to result
LOAD R0, (R7-4) ; load variable result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int sum_array(int arr[], int n) {
int i;
int sum;
sum = 0;
for (i = 0; i < n; i = i + 1) {
sum = sum + arr[i];
}
return sum;
}
int main(void) {
int arr[5];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
return sum_array(arr, 5);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN sum_array
2 L_ZAGRADA (
3 IDN arr
4 L_UGL_ZAGRADA [
5 D_UGL_ZAGRADA ]
6 ZAREZ ,
7 IDN n
8 D_ZAGRADA )
9 L_VIT_ZAGRADA {
10 IDN i
11 TOCKAZAREZ ;
12 IDN sum
13 OP_PRIDRUZI =
14 BROJ 0
15 KR_FOR for
16 OP_LT <
17 PLUS +
18 BROJ 1
19 D_VIT_ZAGRADA }
20 KR_RETURN return
21 IDN main
22 KR_VOID void
23 BROJ 5
24 BROJ 2
25 BROJ 3
26 BROJ 4
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
L_UGL_ZAGRADA 1 4
D_UGL_ZAGRADA 1 5
ZAREZ 1 6
KR_INT 1 0
IDN 1 7
D_ZAGRADA 1 8
L_VIT_ZAGRADA 1 9
KR_INT 2 0
IDN 2 10
TOCKAZAREZ 2 11
KR_INT 3 0
IDN 3 12
TOCKAZAREZ 3 11
IDN 4 12
OP_PRIDRUZI 4 13
BROJ 4 14
TOCKAZAREZ 4 11
KR_FOR 5 15
L_ZAGRADA 5 2
IDN 5 10
OP_PRIDRUZI 5 13
BROJ 5 14
TOCKAZAREZ 5 11
IDN 5 10
OP_LT 5 16
IDN 5 7
TOCKAZAREZ 5 11
IDN 5 10
OP_PRIDRUZI 5 13
IDN 5 10
PLUS 5 17
BROJ 5 18
D_ZAGRADA 5 8
L_VIT_ZAGRADA 5 9
IDN 6 12
OP_PRIDRUZI 6 13
IDN 6 12
PLUS 6 17
IDN 6 3
L_UGL_ZAGRADA 6 4
IDN 6 10
D_UGL_ZAGRADA 6 5
TOCKAZAREZ 6 11
D_VIT_ZAGRADA 7 19
KR_RETURN 8 20
IDN 8 12
TOCKAZAREZ 8 11
D_VIT_ZAGRADA 9 19
KR_INT 11 0
IDN 11 21
L_ZAGRADA 11 2
KR_VOID 11 22
D_ZAGRADA 11 8
L_VIT_ZAGRADA 11 9
KR_INT 12 0
IDN 12 3
L_UGL_ZAGRADA 12 4
BROJ 12 23
D_UGL_ZAGRADA 12 5
TOCKAZAREZ 12 11
IDN 13 3
L_UGL_ZAGRADA 13 4
BROJ 13 14
D_UGL_ZAGRADA 13 5
OP_PRIDRUZI 13 13
BROJ 13 18
TOCKAZAREZ 13 11
IDN 14 3
L_UGL_ZAGRADA 14 4
BROJ 14 18
D_UGL_ZAGRADA 14 5
OP_PRIDRUZI 14 13
BROJ 14 24
TOCKAZAREZ 14 11
IDN 15 3
L_UGL_ZAGRADA 15 4
BROJ 15 24
D_UGL_ZAGRADA 15 5
OP_PRIDRUZI 15 13
BROJ 15 25
TOCKAZAREZ 15 11
IDN 16 3
L_UGL_ZAGRADA 16 4
BROJ 16 25
D_UGL_ZAGRADA 16 5
OP_PRIDRUZI 16 13
BROJ 16 26
TOCKAZAREZ 16 11
IDN 17 3
L_UGL_ZAGRADA 17 4
BROJ 17 26
D_UGL_ZAGRADA 17 5
OP_PRIDRUZI 17 13
BROJ 17 23
TOCKAZAREZ 17 11
KR_RETURN 18 20
IDN 18 1
L_ZAGRADA 18 2
IDN 18 3
ZAREZ 18 6
BROJ 18 23
D_ZAGRADA 18 8
TOCKAZAREZ 18 11
D_VIT_ZAGRADA 19 19
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , sum_array
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
D_UGL_ZAGRADA , ]
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , sum
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum_array
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , sum_array
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
D_UGL_ZAGRADA , ]
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , sum
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum_array
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
sum_array : INT (array(INT), INT) [defined]
Nested Scope 1:
arr : array(INT)
i : INT
n : INT
sum : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
arr : array(INT)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(array(INT), INT), lvalue=false, id=sum_array, elements=0]
<<izravni_deklarator>> [type=INT(array(INT), INT), lvalue=false, id=sum_array, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=sum_array, elements=0]
IDN (1,sum_array) [symbol=sum_array]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<izravni_deklarator>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=arr, elements=0]
IDN (1,arr) [symbol=arr]
L_UGL_ZAGRADA (1,[)
D_UGL_ZAGRADA (1,])
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=n, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=n, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=n, elements=0]
IDN (1,n) [symbol=n]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=sum, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=sum, elements=0]
IDN (3,sum) [symbol=sum]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,sum) [symbol=sum]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (5,for)
L_ZAGRADA (5,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,0) [type=int]
TOCKAZAREZ (5,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_LT (5,<)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,n) [symbol=n]
TOCKAZAREZ (5,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
PLUS (5,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
D_ZAGRADA (5,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (5,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,sum) [symbol=sum]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,sum) [symbol=sum]
PLUS (6,+)
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (6,arr) [symbol=arr]
L_UGL_ZAGRADA (6,[)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
D_UGL_ZAGRADA (6,])
TOCKAZAREZ (6,;)
D_VIT_ZAGRADA (7,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,sum) [symbol=sum]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (11,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (11,main) [symbol=main]
L_ZAGRADA (11,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (11,void)
D_ZAGRADA (11,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (11,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (12,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=array(INT), lvalue=false, id=arr, elements=5]
<<izravni_deklarator>> [type=array(INT), lvalue=false, id=arr, elements=5]
<<izravni_deklarator>> [type=INT, lvalue=true, id=arr, elements=0]
IDN (12,arr) [symbol=arr]
L_UGL_ZAGRADA (12,[)
<<log_ili_izraz>> [lvalue=false, elements=0]
<<log_i_izraz>> [lvalue=false, elements=0]
<<bin_ili_izraz>> [lvalue=false, elements=0]
<<bin_xili_izraz>> [lvalue=false, elements=0]
<<bin_i_izraz>> [lvalue=false, elements=0]
<<jednakosni_izraz>> [lvalue=false, elements=0]
<<odnosni_izraz>> [lvalue=false, elements=0]
<<aditivni_izraz>> [lvalue=false, elements=0]
<<multiplikativni_izraz>> [lvalue=false, elements=0]
<<cast_izraz>> [lvalue=false, elements=0]
<<unarni_izraz>> [lvalue=false, elements=0]
<<postfiks_izraz>> [lvalue=false, elements=0]
<<primarni_izraz>> [lvalue=false, elements=0]
BROJ (12,5) [type=int]
D_UGL_ZAGRADA (12,])
TOCKAZAREZ (12,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (13,arr) [symbol=arr]
L_UGL_ZAGRADA (13,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (13,0) [type=int]
D_UGL_ZAGRADA (13,])
OP_PRIDRUZI (13,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (13,1) [type=int]
TOCKAZAREZ (13,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (14,arr) [symbol=arr]
L_UGL_ZAGRADA (14,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (14,1) [type=int]
D_UGL_ZAGRADA (14,])
OP_PRIDRUZI (14,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (14,2) [type=int]
TOCKAZAREZ (14,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (15,arr) [symbol=arr]
L_UGL_ZAGRADA (15,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (15,2) [type=int]
D_UGL_ZAGRADA (15,])
OP_PRIDRUZI (15,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (15,3) [type=int]
TOCKAZAREZ (15,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (16,arr) [symbol=arr]
L_UGL_ZAGRADA (16,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (16,3) [type=int]
D_UGL_ZAGRADA (16,])
OP_PRIDRUZI (16,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (16,4) [type=int]
TOCKAZAREZ (16,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (17,arr) [symbol=arr]
L_UGL_ZAGRADA (17,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (17,4) [type=int]
D_UGL_ZAGRADA (17,])
OP_PRIDRUZI (17,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (17,5) [type=int]
TOCKAZAREZ (17,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (18,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(array(INT), INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(array(INT), INT), lvalue=false, elements=0]
IDN (18,sum_array) [symbol=sum_array]
L_ZAGRADA (18,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=array(INT), lvalue=false, elements=0]
<<log_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<log_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_xili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<jednakosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<odnosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<aditivni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<cast_izraz>> [type=array(INT), lvalue=false, elements=0]
<<unarni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (18,arr) [symbol=arr]
ZAREZ (18,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (18,5) [type=int]
D_ZAGRADA (18,))
TOCKAZAREZ (18,;)
D_VIT_ZAGRADA (19,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_SUM_ARRAY ; Function sum_array
; Parameter arr at (R7+8)
; Parameter n at (R7+12)
; Local variable i at (R7-4)
; Local variable sum at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-8) ; assign to sum
; For loop with increment (TODO)
LOAD R0, (R7-8) ; load variable sum
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from sum_array
F_MAIN ; Function main
; Local variable arr at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 1, R0 ; load constant 1
STORE R0, (R7-4) ; assign to arr
MOVE 2, R0 ; load constant 2
STORE R0, (R7-4) ; assign to arr
MOVE 3, R0 ; load constant 3
STORE R0, (R7-4) ; assign to arr
MOVE 4, R0 ; load constant 4
STORE R0, (R7-4) ; assign to arr
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to arr
; Function call: sum_array
MOVE 5, R0 ; load constant 5
PUSH R0 ; push argument 2
LOAD R0, (R7-4) ; load variable arr
PUSH R0 ; push argument 1
CALL F_SUM_ARRAY ; call sum_array
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int power(int base, int exp) {
if (exp == 0) {
return 1;
}
return base * power(base, exp - 1);
}
int main(void) {
return power(2, 4);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN power
2 L_ZAGRADA (
3 IDN base
4 ZAREZ ,
5 IDN exp
6 D_ZAGRADA )
7 L_VIT_ZAGRADA {
8 KR_IF if
9 OP_EQ ==
10 BROJ 0
11 KR_RETURN return
12 BROJ 1
13 TOCKAZAREZ ;
14 D_VIT_ZAGRADA }
15 ASTERISK *
16 MINUS -
17 IDN main
18 KR_VOID void
19 BROJ 2
20 BROJ 4
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
ZAREZ 1 4
KR_INT 1 0
IDN 1 5
D_ZAGRADA 1 6
L_VIT_ZAGRADA 1 7
KR_IF 2 8
L_ZAGRADA 2 2
IDN 2 5
OP_EQ 2 9
BROJ 2 10
D_ZAGRADA 2 6
L_VIT_ZAGRADA 2 7
KR_RETURN 3 11
BROJ 3 12
TOCKAZAREZ 3 13
D_VIT_ZAGRADA 4 14
KR_RETURN 5 11
IDN 5 3
ASTERISK 5 15
IDN 5 1
L_ZAGRADA 5 2
IDN 5 3
ZAREZ 5 4
IDN 5 5
MINUS 5 16
BROJ 5 12
D_ZAGRADA 5 6
TOCKAZAREZ 5 13
D_VIT_ZAGRADA 6 14
KR_INT 8 0
IDN 8 17
L_ZAGRADA 8 2
KR_VOID 8 18
D_ZAGRADA 8 6
L_VIT_ZAGRADA 8 7
KR_RETURN 9 11
IDN 9 1
L_ZAGRADA 9 2
BROJ 9 19
ZAREZ 9 4
BROJ 9 20
D_ZAGRADA 9 6
TOCKAZAREZ 9 13
D_VIT_ZAGRADA 10 14
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , power
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , base
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , exp
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , exp
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , base
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , power
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , base
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , exp
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , power
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , power
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , base
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , exp
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , exp
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , base
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , power
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , base
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , exp
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , power
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
power : INT (INT, INT) [defined]
Nested Scope 1:
base : INT
exp : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT, INT), lvalue=false, id=power, elements=0]
<<izravni_deklarator>> [type=INT(INT, INT), lvalue=false, id=power, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=power, elements=0]
IDN (1,power) [symbol=power]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=base, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=base, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=base, elements=0]
IDN (1,base) [symbol=base]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=exp, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=exp, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=exp, elements=0]
IDN (1,exp) [symbol=exp]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (2,if)
L_ZAGRADA (2,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,exp) [symbol=exp]
OP_EQ (2,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (2,0) [type=int]
D_ZAGRADA (2,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (2,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (3,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,1) [type=int]
TOCKAZAREZ (3,;)
D_VIT_ZAGRADA (4,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,base) [symbol=base]
ASTERISK (5,*)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
IDN (5,power) [symbol=power]
L_ZAGRADA (5,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,base) [symbol=base]
ZAREZ (5,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,exp) [symbol=exp]
MINUS (5,-)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
D_ZAGRADA (5,))
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (8,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (8,main) [symbol=main]
L_ZAGRADA (8,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (8,void)
D_ZAGRADA (8,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (8,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (9,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
IDN (9,power) [symbol=power]
L_ZAGRADA (9,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,2) [type=int]
ZAREZ (9,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,4) [type=int]
D_ZAGRADA (9,))
TOCKAZAREZ (9,;)
D_VIT_ZAGRADA (10,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_POWER ; Function power
; Parameter base at (R7+8)
; Parameter exp at (R7+12)
; Compound statement
; If statement
LOAD R0, (R7+12) ; load variable exp
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_EQ L_SC_TRUE1 ; comparison OP_EQ
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
LOAD R0, (R7+8) ; load variable base
PUSH R0 ; save left operand
; Function call: power
LOAD R0, (R7+12) ; load variable exp
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
SUB R0, R1, R0 ; subtraction
PUSH R0 ; push argument 2
LOAD R0, (R7+8) ; load variable base
PUSH R0 ; push argument 1
CALL F_POWER ; call power
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Multiplication: R0 * R1
CMP R1, 0
JP_EQ L_BREAK1 ; if multiplier is 0
MOVE R0, R2 ; save multiplicand
MOVE R1, R3 ; save multiplier
MOVE 0, R0 ; initialize result
L_LOOP1 ; multiplication loop
ADD R0, R2, R0 ; add multiplicand to result
SUB R3, 1, R3 ; decrement multiplier
CMP R3, 0
JP_GT L_LOOP1 ; repeat if multiplier > 0
L_BREAK1 ; multiplication done
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from power
F_MAIN ; Function main
; Compound statement
; Function call: power
MOVE 4, R0 ; load constant 4
PUSH R0 ; push argument 2
MOVE 2, R0 ; load constant 2
PUSH R0 ; push argument 1
CALL F_POWER ; call power
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
int main(void) {
return gcd(48, 18);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN gcd
2 L_ZAGRADA (
3 IDN a
4 ZAREZ ,
5 IDN b
6 D_ZAGRADA )
7 L_VIT_ZAGRADA {
8 KR_IF if
9 OP_EQ ==
10 BROJ 0
11 KR_RETURN return
12 TOCKAZAREZ ;
13 D_VIT_ZAGRADA }
14 OP_MOD %
15 IDN main
16 KR_VOID void
17 BROJ 48
18 BROJ 18
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
ZAREZ 1 4
KR_INT 1 0
IDN 1 5
D_ZAGRADA 1 6
L_VIT_ZAGRADA 1 7
KR_IF 2 8
L_ZAGRADA 2 2
IDN 2 5
OP_EQ 2 9
BROJ 2 10
D_ZAGRADA 2 6
L_VIT_ZAGRADA 2 7
KR_RETURN 3 11
IDN 3 3
TOCKAZAREZ 3 12
D_VIT_ZAGRADA 4 13
KR_RETURN 5 11
IDN 5 1
L_ZAGRADA 5 2
IDN 5 5
ZAREZ 5 4
IDN 5 3
OP_MOD 5 14
IDN 5 5
D_ZAGRADA 5 6
TOCKAZAREZ 5 12
D_VIT_ZAGRADA 6 13
KR_INT 8 0
IDN 8 15
L_ZAGRADA 8 2
KR_VOID 8 16
D_ZAGRADA 8 6
L_VIT_ZAGRADA 8 7
KR_RETURN 9 11
IDN 9 1
L_ZAGRADA 9 2
BROJ 9 17
ZAREZ 9 4
BROJ 9 18
D_ZAGRADA 9 6
TOCKAZAREZ 9 12
D_VIT_ZAGRADA 10 13
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , gcd
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , a
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , b
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , gcd
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , gcd
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 48
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 18
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , gcd
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , a
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , b
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , gcd
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , gcd
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 48
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 18
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
gcd : INT (INT, INT) [defined]
main : INT () [defined]
Nested Scope 1:
a : INT
b : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT, INT), lvalue=false, id=gcd, elements=0]
<<izravni_deklarator>> [type=INT(INT, INT), lvalue=false, id=gcd, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=gcd, elements=0]
IDN (1,gcd) [symbol=gcd]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=a, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=a, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=a, elements=0]
IDN (1,a) [symbol=a]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=b, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=b, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=b, elements=0]
IDN (1,b) [symbol=b]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (2,if)
L_ZAGRADA (2,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,b) [symbol=b]
OP_EQ (2,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (2,0) [type=int]
D_ZAGRADA (2,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (2,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (3,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,a) [symbol=a]
TOCKAZAREZ (3,;)
D_VIT_ZAGRADA (4,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
IDN (5,gcd) [symbol=gcd]
L_ZAGRADA (5,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,b) [symbol=b]
ZAREZ (5,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,a) [symbol=a]
OP_MOD (5,%)
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,b) [symbol=b]
D_ZAGRADA (5,))
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (8,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (8,main) [symbol=main]
L_ZAGRADA (8,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (8,void)
D_ZAGRADA (8,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (8,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (9,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
IDN (9,gcd) [symbol=gcd]
L_ZAGRADA (9,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,48) [type=int]
ZAREZ (9,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,18) [type=int]
D_ZAGRADA (9,))
TOCKAZAREZ (9,;)
D_VIT_ZAGRADA (10,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_GCD ; Function gcd
; Parameter a at (R7+8)
; Parameter b at (R7+12)
; Compound statement
; If statement
LOAD R0, (R7+12) ; load variable b
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_EQ L_SC_TRUE1 ; comparison OP_EQ
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
LOAD R0, (R7+8) ; load variable a
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
; Function call: gcd
LOAD R0, (R7+8) ; load variable a
PUSH R0 ; save left operand
LOAD R0, (R7+12) ; load variable b
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Modulo not implemented (TODO)
PUSH R0 ; push argument 2
LOAD R0, (R7+12) ; load variable b
PUSH R0 ; push argument 1
CALL F_GCD ; call gcd
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from gcd
F_MAIN ; Function main
; Compound statement
; Function call: gcd
MOVE 18, R0 ; load constant 18
PUSH R0 ; push argument 2
MOVE 48, R0 ; load constant 48
PUSH R0 ; push argument 1
CALL F_GCD ; call gcd
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
int j;
int sum;
sum = 0;
for (i = 0; i < 3; i = i + 1) {
for (j = 0; j < 3; j = j + 1) {
sum = sum + 1;
}
}
return sum;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 IDN j
9 IDN sum
10 OP_PRIDRUZI =
11 BROJ 0
12 KR_FOR for
13 OP_LT <
14 BROJ 3
15 PLUS +
16 BROJ 1
17 D_VIT_ZAGRADA }
18 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
KR_INT 4 0
IDN 4 9
TOCKAZAREZ 4 7
IDN 5 9
OP_PRIDRUZI 5 10
BROJ 5 11
TOCKAZAREZ 5 7
KR_FOR 6 12
L_ZAGRADA 6 2
IDN 6 6
OP_PRIDRUZI 6 10
BROJ 6 11
TOCKAZAREZ 6 7
IDN 6 6
OP_LT 6 13
BROJ 6 14
TOCKAZAREZ 6 7
IDN 6 6
OP_PRIDRUZI 6 10
IDN 6 6
PLUS 6 15
BROJ 6 16
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
KR_FOR 7 12
L_ZAGRADA 7 2
IDN 7 8
OP_PRIDRUZI 7 10
BROJ 7 11
TOCKAZAREZ 7 7
IDN 7 8
OP_LT 7 13
BROJ 7 14
TOCKAZAREZ 7 7
IDN 7 8
OP_PRIDRUZI 7 10
IDN 7 8
PLUS 7 15
BROJ 7 16
D_ZAGRADA 7 4
L_VIT_ZAGRADA 7 5
IDN 8 9
OP_PRIDRUZI 8 10
IDN 8 9
PLUS 8 15
BROJ 8 16
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 17
D_VIT_ZAGRADA 10 17
KR_RETURN 11 18
IDN 11 9
TOCKAZAREZ 11 7
D_VIT_ZAGRADA 12 17
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , j
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , sum
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , j
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , sum
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
i : INT
j : INT
sum : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=j, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=j, elements=0]
IDN (3,j) [symbol=j]
TOCKAZAREZ (3,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (4,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=sum, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=sum, elements=0]
IDN (4,sum) [symbol=sum]
TOCKAZAREZ (4,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,sum) [symbol=sum]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,0) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (6,for)
L_ZAGRADA (6,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
TOCKAZAREZ (6,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
OP_LT (6,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,3) [type=int]
TOCKAZAREZ (6,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
PLUS (6,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,1) [type=int]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (7,for)
L_ZAGRADA (7,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,j) [symbol=j]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,0) [type=int]
TOCKAZAREZ (7,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,j) [symbol=j]
OP_LT (7,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,3) [type=int]
TOCKAZAREZ (7,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,j) [symbol=j]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,j) [symbol=j]
PLUS (7,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,1) [type=int]
D_ZAGRADA (7,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (7,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,sum) [symbol=sum]
OP_PRIDRUZI (8,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,sum) [symbol=sum]
PLUS (8,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (8,1) [type=int]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
D_VIT_ZAGRADA (10,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (11,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (11,sum) [symbol=sum]
TOCKAZAREZ (11,;)
D_VIT_ZAGRADA (12,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
; Local variable j at (R7-8)
; Local variable sum at (R7-12)
SUB R7, 12, R7 ; allocate 3 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-12) ; assign to sum
; For loop with increment (TODO)
LOAD R0, (R7-12) ; load variable sum
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 12, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
int y;
x = 5;
y = 10;
if (x > 0) {
if (y > 0) {
return 1;
}
}
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 IDN y
9 OP_PRIDRUZI =
10 BROJ 5
11 BROJ 10
12 KR_IF if
13 OP_GT >
14 BROJ 0
15 KR_RETURN return
16 BROJ 1
17 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 9
BROJ 4 10
TOCKAZAREZ 4 7
IDN 5 8
OP_PRIDRUZI 5 9
BROJ 5 11
TOCKAZAREZ 5 7
KR_IF 6 12
L_ZAGRADA 6 2
IDN 6 6
OP_GT 6 13
BROJ 6 14
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
KR_IF 7 12
L_ZAGRADA 7 2
IDN 7 8
OP_GT 7 13
BROJ 7 14
D_ZAGRADA 7 4
L_VIT_ZAGRADA 7 5
KR_RETURN 8 15
BROJ 8 16
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 17
D_VIT_ZAGRADA 10 17
KR_RETURN 11 15
BROJ 11 14
TOCKAZAREZ 11 7
D_VIT_ZAGRADA 12 17
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
y : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (3,y) [symbol=y]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,y) [symbol=y]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,10) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (6,if)
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,x) [symbol=x]
OP_GT (6,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (7,if)
L_ZAGRADA (7,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,y) [symbol=y]
OP_GT (7,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,0) [type=int]
D_ZAGRADA (7,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (7,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (8,1) [type=int]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
D_VIT_ZAGRADA (10,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (11,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (11,0) [type=int]
TOCKAZAREZ (11,;)
D_VIT_ZAGRADA (12,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
MOVE 10, R0 ; load constant 10
STORE R0, (R7-8) ; assign to y
; If statement
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE1 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
; If statement
LOAD R0, (R7-8) ; load variable y
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE2 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END2
L_SC_TRUE2
MOVE 1, R0 ; comparison result true
L_SC_END2
CMP R0, 0
JP_EQ L_END2 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END2 ; end if
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
int y;
x = 5;
y = 3;
return x - y;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 IDN y
9 OP_PRIDRUZI =
10 BROJ 5
11 BROJ 3
12 KR_RETURN return
13 MINUS -
14 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 9
BROJ 4 10
TOCKAZAREZ 4 7
IDN 5 8
OP_PRIDRUZI 5 9
BROJ 5 11
TOCKAZAREZ 5 7
KR_RETURN 6 12
IDN 6 6
MINUS 6 13
IDN 6 8
TOCKAZAREZ 6 7
D_VIT_ZAGRADA 7 14
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
y : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (3,y) [symbol=y]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,y) [symbol=y]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,3) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (6,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,x) [symbol=x]
MINUS (6,-)
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
TOCKAZAREZ (6,;)
D_VIT_ZAGRADA (7,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
MOVE 3, R0 ; load constant 3
STORE R0, (R7-8) ; assign to y
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
LOAD R0, (R7-8) ; load variable y
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
SUB R0, R1, R0 ; subtraction
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
int j;
for (i = 0; i < 5; i = i + 1) {
for (j = 0; j < 5; j = j + 1) {
if (i == j) {
break;
}
}
}
return i;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 IDN j
9 KR_FOR for
10 OP_PRIDRUZI =
11 BROJ 0
12 OP_LT <
13 BROJ 5
14 PLUS +
15 BROJ 1
16 KR_IF if
17 OP_EQ ==
18 KR_BREAK break
19 D_VIT_ZAGRADA }
20 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
KR_FOR 4 9
L_ZAGRADA 4 2
IDN 4 6
OP_PRIDRUZI 4 10
BROJ 4 11
TOCKAZAREZ 4 7
IDN 4 6
OP_LT 4 12
BROJ 4 13
TOCKAZAREZ 4 7
IDN 4 6
OP_PRIDRUZI 4 10
IDN 4 6
PLUS 4 14
BROJ 4 15
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
KR_FOR 5 9
L_ZAGRADA 5 2
IDN 5 8
OP_PRIDRUZI 5 10
BROJ 5 11
TOCKAZAREZ 5 7
IDN 5 8
OP_LT 5 12
BROJ 5 13
TOCKAZAREZ 5 7
IDN 5 8
OP_PRIDRUZI 5 10
IDN 5 8
PLUS 5 14
BROJ 5 15
D_ZAGRADA 5 4
L_VIT_ZAGRADA 5 5
KR_IF 6 16
L_ZAGRADA 6 2
IDN 6 6
OP_EQ 6 17
IDN 6 8
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
KR_BREAK 7 18
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 19
D_VIT_ZAGRADA 9 19
D_VIT_ZAGRADA 10 19
KR_RETURN 11 20
IDN 11 6
TOCKAZAREZ 11 7
D_VIT_ZAGRADA 12 19
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , j
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_BREAK , break
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , j
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_BREAK , break
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
i : INT
j : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=j, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=j, elements=0]
IDN (3,j) [symbol=j]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (4,for)
L_ZAGRADA (4,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
TOCKAZAREZ (4,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_LT (4,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
TOCKAZAREZ (4,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
PLUS (4,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,1) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (5,for)
L_ZAGRADA (5,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,j) [symbol=j]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,0) [type=int]
TOCKAZAREZ (5,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,j) [symbol=j]
OP_LT (5,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,5) [type=int]
TOCKAZAREZ (5,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,j) [symbol=j]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,j) [symbol=j]
PLUS (5,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
D_ZAGRADA (5,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (5,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (6,if)
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
OP_EQ (6,==)
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,j) [symbol=j]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_BREAK (7,break)
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
D_VIT_ZAGRADA (9,})
D_VIT_ZAGRADA (10,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (11,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (11,i) [symbol=i]
TOCKAZAREZ (11,;)
D_VIT_ZAGRADA (12,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
; Local variable j at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
; For loop with increment (TODO)
LOAD R0, (R7-4) ; load variable i
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
struct Point {
int x;
int y;
};
int main(void) {
struct Point p;
p.x = 10;
p.y = 20;
return p.x + p.y;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_STRUCT struct
1 IDN Point
2 L_VIT_ZAGRADA {
3 KR_INT int
4 IDN x
5 TOCKAZAREZ ;
6 IDN y
7 D_VIT_ZAGRADA }
8 IDN main
9 L_ZAGRADA (
10 KR_VOID void
11 D_ZAGRADA )
12 IDN p
13 TOCKA .
14 OP_PRIDRUZI =
15 BROJ 10
16 BROJ 20
17 KR_RETURN return
18 PLUS +
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_STRUCT 1 0
IDN 1 1
L_VIT_ZAGRADA 1 2
KR_INT 2 3
IDN 2 4
TOCKAZAREZ 2 5
KR_INT 3 3
IDN 3 6
TOCKAZAREZ 3 5
D_VIT_ZAGRADA 4 7
TOCKAZAREZ 4 5
KR_INT 6 3
IDN 6 8
L_ZAGRADA 6 9
KR_VOID 6 10
D_ZAGRADA 6 11
L_VIT_ZAGRADA 6 2
KR_STRUCT 7 0
IDN 7 1
IDN 7 12
TOCKAZAREZ 7 5
IDN 8 12
TOCKA 8 13
IDN 8 4
OP_PRIDRUZI 8 14
BROJ 8 15
TOCKAZAREZ 8 5
IDN 9 12
TOCKA 9 13
IDN 9 6
OP_PRIDRUZI 9 14
BROJ 9 16
TOCKAZAREZ 9 5
KR_RETURN 10 17
IDN 10 12
TOCKA 10 13
IDN 10 4
PLUS 10 18
IDN 10 12
TOCKA 10 13
IDN 10 6
TOCKAZAREZ 10 5
D_VIT_ZAGRADA 11 7
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
<struct_specifikator>
KR_STRUCT , struct
IDN , Point
L_VIT_ZAGRADA , {
<struct_lista_deklaracija>
<struct_lista_deklaracija>
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
<specifikator_tipa>
KR_INT , int
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
<specifikator_tipa>
KR_INT , int
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
TOCKAZAREZ , ;
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
<struct_specifikator>
KR_STRUCT , struct
IDN , Point
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , p
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , p
TOCKA , .
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , p
TOCKA , .
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , p
TOCKA , .
IDN , x
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , p
TOCKA , .
IDN , y
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<struct_specifikator>
KR_STRUCT , struct
IDN , Point
L_VIT_ZAGRADA , {
<struct_lista_deklaracija>
<struct_lista_deklaracija>
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
KR_INT , int
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
KR_INT , int
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
TOCKAZAREZ , ;
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<struct_specifikator>
KR_STRUCT , struct
IDN , Point
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , p
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , p
TOCKA , .
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , p
TOCKA , .
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , p
TOCKA , .
IDN , x
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , p
TOCKA , .
IDN , y
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
SEMANTIC ERRORS:
Semantic analysis failed: class hr.fer.ppj.semantics.tree.NonTerminalNode cannot be cast to class hr.fer.ppj.semantics.tree.TerminalNode (hr.fer.ppj.semantics.tree.NonTerminalNode and hr.fer.ppj.semantics.tree.TerminalNode are in unnamed module of loader 'app')
struct Rectangle {
int width;
int height;
};
int area(struct Rectangle r) {
return r.width * r.height;
}
int main(void) {
struct Rectangle rect;
rect.width = 5;
rect.height = 10;
return area(rect);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_STRUCT struct
1 IDN Rectangle
2 L_VIT_ZAGRADA {
3 KR_INT int
4 IDN width
5 TOCKAZAREZ ;
6 IDN height
7 D_VIT_ZAGRADA }
8 IDN area
9 L_ZAGRADA (
10 IDN r
11 D_ZAGRADA )
12 KR_RETURN return
13 TOCKA .
14 ASTERISK *
15 IDN main
16 KR_VOID void
17 IDN rect
18 OP_PRIDRUZI =
19 BROJ 5
20 BROJ 10
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_STRUCT 1 0
IDN 1 1
L_VIT_ZAGRADA 1 2
KR_INT 2 3
IDN 2 4
TOCKAZAREZ 2 5
KR_INT 3 3
IDN 3 6
TOCKAZAREZ 3 5
D_VIT_ZAGRADA 4 7
TOCKAZAREZ 4 5
KR_INT 6 3
IDN 6 8
L_ZAGRADA 6 9
KR_STRUCT 6 0
IDN 6 1
IDN 6 10
D_ZAGRADA 6 11
L_VIT_ZAGRADA 6 2
KR_RETURN 7 12
IDN 7 10
TOCKA 7 13
IDN 7 4
ASTERISK 7 14
IDN 7 10
TOCKA 7 13
IDN 7 6
TOCKAZAREZ 7 5
D_VIT_ZAGRADA 8 7
KR_INT 10 3
IDN 10 15
L_ZAGRADA 10 9
KR_VOID 10 16
D_ZAGRADA 10 11
L_VIT_ZAGRADA 10 2
KR_STRUCT 11 0
IDN 11 1
IDN 11 17
TOCKAZAREZ 11 5
IDN 12 17
TOCKA 12 13
IDN 12 4
OP_PRIDRUZI 12 18
BROJ 12 19
TOCKAZAREZ 12 5
IDN 13 17
TOCKA 13 13
IDN 13 6
OP_PRIDRUZI 13 18
BROJ 13 20
TOCKAZAREZ 13 5
KR_RETURN 14 12
IDN 14 8
L_ZAGRADA 14 9
IDN 14 17
D_ZAGRADA 14 11
TOCKAZAREZ 14 5
D_VIT_ZAGRADA 15 7
<prijevodna_jedinica>
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
<struct_specifikator>
KR_STRUCT , struct
IDN , Rectangle
L_VIT_ZAGRADA , {
<struct_lista_deklaracija>
<struct_lista_deklaracija>
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
<specifikator_tipa>
KR_INT , int
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , width
TOCKAZAREZ , ;
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
<specifikator_tipa>
KR_INT , int
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , height
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
TOCKAZAREZ , ;
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , area
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
<struct_specifikator>
KR_STRUCT , struct
IDN , Rectangle
<deklarator>
<izravni_deklarator>
IDN , r
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , r
TOCKA , .
IDN , width
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , r
TOCKA , .
IDN , height
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
<struct_specifikator>
KR_STRUCT , struct
IDN , Rectangle
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , rect
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , rect
TOCKA , .
IDN , width
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , rect
TOCKA , .
IDN , height
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , area
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , rect
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<struct_specifikator>
KR_STRUCT , struct
IDN , Rectangle
L_VIT_ZAGRADA , {
<struct_lista_deklaracija>
<struct_lista_deklaracija>
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
KR_INT , int
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , width
TOCKAZAREZ , ;
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
KR_INT , int
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , height
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
TOCKAZAREZ , ;
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , area
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<struct_specifikator>
KR_STRUCT , struct
IDN , Rectangle
<deklarator>
<izravni_deklarator>
IDN , r
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , r
TOCKA , .
IDN , width
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , r
TOCKA , .
IDN , height
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<struct_specifikator>
KR_STRUCT , struct
IDN , Rectangle
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , rect
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , rect
TOCKA , .
IDN , width
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , rect
TOCKA , .
IDN , height
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , area
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , rect
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
SEMANTIC ERRORS:
Semantic analysis failed: class hr.fer.ppj.semantics.tree.NonTerminalNode cannot be cast to class hr.fer.ppj.semantics.tree.TerminalNode (hr.fer.ppj.semantics.tree.NonTerminalNode and hr.fer.ppj.semantics.tree.TerminalNode are in unnamed module of loader 'app')
struct Node {
int value;
int next;
};
int main(void) {
struct Node node;
node.value = 42;
node.next = 0;
return node.value;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_STRUCT struct
1 IDN Node
2 L_VIT_ZAGRADA {
3 KR_INT int
4 IDN value
5 TOCKAZAREZ ;
6 IDN next
7 D_VIT_ZAGRADA }
8 IDN main
9 L_ZAGRADA (
10 KR_VOID void
11 D_ZAGRADA )
12 IDN node
13 TOCKA .
14 OP_PRIDRUZI =
15 BROJ 42
16 BROJ 0
17 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_STRUCT 1 0
IDN 1 1
L_VIT_ZAGRADA 1 2
KR_INT 2 3
IDN 2 4
TOCKAZAREZ 2 5
KR_INT 3 3
IDN 3 6
TOCKAZAREZ 3 5
D_VIT_ZAGRADA 4 7
TOCKAZAREZ 4 5
KR_INT 6 3
IDN 6 8
L_ZAGRADA 6 9
KR_VOID 6 10
D_ZAGRADA 6 11
L_VIT_ZAGRADA 6 2
KR_STRUCT 7 0
IDN 7 1
IDN 7 12
TOCKAZAREZ 7 5
IDN 8 12
TOCKA 8 13
IDN 8 4
OP_PRIDRUZI 8 14
BROJ 8 15
TOCKAZAREZ 8 5
IDN 9 12
TOCKA 9 13
IDN 9 6
OP_PRIDRUZI 9 14
BROJ 9 16
TOCKAZAREZ 9 5
KR_RETURN 10 17
IDN 10 12
TOCKA 10 13
IDN 10 4
TOCKAZAREZ 10 5
D_VIT_ZAGRADA 11 7
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
<struct_specifikator>
KR_STRUCT , struct
IDN , Node
L_VIT_ZAGRADA , {
<struct_lista_deklaracija>
<struct_lista_deklaracija>
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
<specifikator_tipa>
KR_INT , int
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , value
TOCKAZAREZ , ;
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
<specifikator_tipa>
KR_INT , int
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , next
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
TOCKAZAREZ , ;
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
<struct_specifikator>
KR_STRUCT , struct
IDN , Node
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , node
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , node
TOCKA , .
IDN , value
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 42
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , node
TOCKA , .
IDN , next
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , node
TOCKA , .
IDN , value
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<struct_specifikator>
KR_STRUCT , struct
IDN , Node
L_VIT_ZAGRADA , {
<struct_lista_deklaracija>
<struct_lista_deklaracija>
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
KR_INT , int
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , value
TOCKAZAREZ , ;
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
KR_INT , int
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , next
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
TOCKAZAREZ , ;
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<struct_specifikator>
KR_STRUCT , struct
IDN , Node
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , node
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , node
TOCKA , .
IDN , value
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 42
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , node
TOCKA , .
IDN , next
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , node
TOCKA , .
IDN , value
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
SEMANTIC ERRORS:
Semantic analysis failed: class hr.fer.ppj.semantics.tree.NonTerminalNode cannot be cast to class hr.fer.ppj.semantics.tree.TerminalNode (hr.fer.ppj.semantics.tree.NonTerminalNode and hr.fer.ppj.semantics.tree.TerminalNode are in unnamed module of loader 'app')
int main(void) {
int x;
x = 5;
x = x + 1;
return x;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 PLUS +
11 BROJ 1
12 KR_RETURN return
13 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 8
IDN 4 6
PLUS 4 10
BROJ 4 11
TOCKAZAREZ 4 7
KR_RETURN 5 12
IDN 5 6
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 13
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
PLUS (4,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,1) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 5;
x = x - 1;
return x;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 MINUS -
11 BROJ 1
12 KR_RETURN return
13 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 8
IDN 4 6
MINUS 4 10
BROJ 4 11
TOCKAZAREZ 4 7
KR_RETURN 5 12
IDN 5 6
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 13
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
MINUS (4,-)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,1) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
SUB R0, R1, R0 ; subtraction
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 5;
x = x + 3;
return x;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 PLUS +
11 BROJ 3
12 KR_RETURN return
13 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 8
IDN 4 6
PLUS 4 10
BROJ 4 11
TOCKAZAREZ 4 7
KR_RETURN 5 12
IDN 5 6
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 13
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
PLUS (4,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,3) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 3, R0 ; load constant 3
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 10;
x = x - 3;
return x;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 10
10 MINUS -
11 BROJ 3
12 KR_RETURN return
13 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 8
IDN 4 6
MINUS 4 10
BROJ 4 11
TOCKAZAREZ 4 7
KR_RETURN 5 12
IDN 5 6
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 13
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,10) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
MINUS (4,-)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,3) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 10, R0 ; load constant 10
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 3, R0 ; load constant 3
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
SUB R0, R1, R0 ; subtraction
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 5;
x = x * 2;
return x;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 ASTERISK *
11 BROJ 2
12 KR_RETURN return
13 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 8
IDN 4 6
ASTERISK 4 10
BROJ 4 11
TOCKAZAREZ 4 7
KR_RETURN 5 12
IDN 5 6
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 13
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
ASTERISK (4,*)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,2) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 2, R0 ; load constant 2
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Multiplication: R0 * R1
CMP R1, 0
JP_EQ L_BREAK1 ; if multiplier is 0
MOVE R0, R2 ; save multiplicand
MOVE R1, R3 ; save multiplier
MOVE 0, R0 ; initialize result
L_LOOP1 ; multiplication loop
ADD R0, R2, R0 ; add multiplicand to result
SUB R3, 1, R3 ; decrement multiplier
CMP R3, 0
JP_GT L_LOOP1 ; repeat if multiplier > 0
L_BREAK1 ; multiplication done
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 20;
x = x / 4;
return x;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 20
10 OP_DIJELI /
11 BROJ 4
12 KR_RETURN return
13 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 8
IDN 4 6
OP_DIJELI 4 10
BROJ 4 11
TOCKAZAREZ 4 7
KR_RETURN 5 12
IDN 5 6
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 13
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_DIJELI , /
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_DIJELI , /
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,20) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_DIJELI (4,/)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,4) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 20, R0 ; load constant 20
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 4, R0 ; load constant 4
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Division not implemented (TODO)
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int a;
int b;
int result;
a = 7;
b = 3;
result = a * b;
return result;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN a
7 TOCKAZAREZ ;
8 IDN b
9 IDN result
10 OP_PRIDRUZI =
11 BROJ 7
12 BROJ 3
13 ASTERISK *
14 KR_RETURN return
15 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
KR_INT 4 0
IDN 4 9
TOCKAZAREZ 4 7
IDN 5 6
OP_PRIDRUZI 5 10
BROJ 5 11
TOCKAZAREZ 5 7
IDN 6 8
OP_PRIDRUZI 6 10
BROJ 6 12
TOCKAZAREZ 6 7
IDN 7 9
OP_PRIDRUZI 7 10
IDN 7 6
ASTERISK 7 13
IDN 7 8
TOCKAZAREZ 7 7
KR_RETURN 8 14
IDN 8 9
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 15
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , a
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , b
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , a
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , b
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
a : INT
b : INT
result : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=a, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=a, elements=0]
IDN (2,a) [symbol=a]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=b, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=b, elements=0]
IDN (3,b) [symbol=b]
TOCKAZAREZ (3,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (4,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=result, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=result, elements=0]
IDN (4,result) [symbol=result]
TOCKAZAREZ (4,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,a) [symbol=a]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,7) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,b) [symbol=b]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,3) [type=int]
TOCKAZAREZ (6,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,result) [symbol=result]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,a) [symbol=a]
ASTERISK (7,*)
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,b) [symbol=b]
TOCKAZAREZ (7,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,result) [symbol=result]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable a at (R7-4)
; Local variable b at (R7-8)
; Local variable result at (R7-12)
SUB R7, 12, R7 ; allocate 3 local variables
; Compound statement
; Local declarations (TODO)
MOVE 7, R0 ; load constant 7
STORE R0, (R7-4) ; assign to a
MOVE 3, R0 ; load constant 3
STORE R0, (R7-8) ; assign to b
LOAD R0, (R7-4) ; load variable a
PUSH R0 ; save left operand
LOAD R0, (R7-8) ; load variable b
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Multiplication: R0 * R1
CMP R1, 0
JP_EQ L_BREAK1 ; if multiplier is 0
MOVE R0, R2 ; save multiplicand
MOVE R1, R3 ; save multiplier
MOVE 0, R0 ; initialize result
L_LOOP1 ; multiplication loop
ADD R0, R2, R0 ; add multiplicand to result
SUB R3, 1, R3 ; decrement multiplier
CMP R3, 0
JP_GT L_LOOP1 ; repeat if multiplier > 0
L_BREAK1 ; multiplication done
STORE R0, (R7-12) ; assign to result
LOAD R0, (R7-12) ; load variable result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 12, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 17;
x = x % 5;
return x;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 17
10 OP_MOD %
11 BROJ 5
12 KR_RETURN return
13 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 8
IDN 4 6
OP_MOD 4 10
BROJ 4 11
TOCKAZAREZ 4 7
KR_RETURN 5 12
IDN 5 6
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 13
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 17
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 17
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,17) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_MOD (4,%)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 17, R0 ; load constant 17
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 5, R0 ; load constant 5
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Modulo not implemented (TODO)
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 5;
x++;
return x;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 OP_INC ++
11 KR_RETURN return
12 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
IDN 4 6
OP_INC 4 10
TOCKAZAREZ 4 7
KR_RETURN 5 11
IDN 5 6
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 12
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_INC , ++
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_INC , ++
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_INC (4,++)
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load x
MOVE R0, R1 ; save old value
ADD R0, 1, R0 ; post-increment
STORE R0, (R7-4) ; store incremented x
MOVE R1, R0 ; return old value
LOAD R0, (R7-4) ; load variable x
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 5;
x--;
return x;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 OP_DEC --
11 KR_RETURN return
12 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
IDN 4 6
OP_DEC 4 10
TOCKAZAREZ 4 7
KR_RETURN 5 11
IDN 5 6
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 12
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_DEC , --
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_DEC , --
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_DEC (4,--)
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load x
MOVE R0, R1 ; save old value
SUB R0, 1, R0 ; post-decrement
STORE R0, (R7-4) ; store decremented x
MOVE R1, R0 ; return old value
LOAD R0, (R7-4) ; load variable x
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
int y;
x = 5;
y = ++x;
return y;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 IDN y
9 OP_PRIDRUZI =
10 BROJ 5
11 OP_INC ++
12 KR_RETURN return
13 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 9
BROJ 4 10
TOCKAZAREZ 4 7
IDN 5 8
OP_PRIDRUZI 5 9
OP_INC 5 11
IDN 5 6
TOCKAZAREZ 5 7
KR_RETURN 6 12
IDN 6 8
TOCKAZAREZ 6 7
D_VIT_ZAGRADA 7 13
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
OP_INC , ++
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
OP_INC , ++
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
y : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (3,y) [symbol=y]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,y) [symbol=y]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
OP_INC (5,++)
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (6,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
TOCKAZAREZ (6,;)
D_VIT_ZAGRADA (7,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load x
ADD R0, 1, R0 ; pre-increment
STORE R0, (R7-4) ; store incremented x
STORE R0, (R7-8) ; assign to y
LOAD R0, (R7-8) ; load variable y
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
int y;
x = 5;
y = --x;
return y;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 IDN y
9 OP_PRIDRUZI =
10 BROJ 5
11 OP_DEC --
12 KR_RETURN return
13 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 9
BROJ 4 10
TOCKAZAREZ 4 7
IDN 5 8
OP_PRIDRUZI 5 9
OP_DEC 5 11
IDN 5 6
TOCKAZAREZ 5 7
KR_RETURN 6 12
IDN 6 8
TOCKAZAREZ 6 7
D_VIT_ZAGRADA 7 13
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
OP_DEC , --
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
OP_DEC , --
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
y : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (3,y) [symbol=y]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,y) [symbol=y]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
OP_DEC (5,--)
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (6,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
TOCKAZAREZ (6,;)
D_VIT_ZAGRADA (7,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load x
SUB R0, 1, R0 ; pre-decrement
STORE R0, (R7-4) ; store decremented x
STORE R0, (R7-8) ; assign to y
LOAD R0, (R7-8) ; load variable y
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int arr[10];
int i;
for (i = 0; i < 10; i = i + 1) {
arr[i] = i * 2;
}
return arr[5];
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN arr
7 L_UGL_ZAGRADA [
8 BROJ 10
9 D_UGL_ZAGRADA ]
10 TOCKAZAREZ ;
11 IDN i
12 KR_FOR for
13 OP_PRIDRUZI =
14 BROJ 0
15 OP_LT <
16 PLUS +
17 BROJ 1
18 ASTERISK *
19 BROJ 2
20 D_VIT_ZAGRADA }
21 KR_RETURN return
22 BROJ 5
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
L_UGL_ZAGRADA 2 7
BROJ 2 8
D_UGL_ZAGRADA 2 9
TOCKAZAREZ 2 10
KR_INT 3 0
IDN 3 11
TOCKAZAREZ 3 10
KR_FOR 4 12
L_ZAGRADA 4 2
IDN 4 11
OP_PRIDRUZI 4 13
BROJ 4 14
TOCKAZAREZ 4 10
IDN 4 11
OP_LT 4 15
BROJ 4 8
TOCKAZAREZ 4 10
IDN 4 11
OP_PRIDRUZI 4 13
IDN 4 11
PLUS 4 16
BROJ 4 17
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
IDN 5 6
L_UGL_ZAGRADA 5 7
IDN 5 11
D_UGL_ZAGRADA 5 9
OP_PRIDRUZI 5 13
IDN 5 11
ASTERISK 5 18
BROJ 5 19
TOCKAZAREZ 5 10
D_VIT_ZAGRADA 6 20
KR_RETURN 7 21
IDN 7 6
L_UGL_ZAGRADA 7 7
BROJ 7 22
D_UGL_ZAGRADA 7 9
TOCKAZAREZ 7 10
D_VIT_ZAGRADA 8 20
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
arr : array(INT)
i : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=array(INT), lvalue=false, id=arr, elements=10]
<<izravni_deklarator>> [type=array(INT), lvalue=false, id=arr, elements=10]
<<izravni_deklarator>> [type=INT, lvalue=true, id=arr, elements=0]
IDN (2,arr) [symbol=arr]
L_UGL_ZAGRADA (2,[)
<<log_ili_izraz>> [lvalue=false, elements=0]
<<log_i_izraz>> [lvalue=false, elements=0]
<<bin_ili_izraz>> [lvalue=false, elements=0]
<<bin_xili_izraz>> [lvalue=false, elements=0]
<<bin_i_izraz>> [lvalue=false, elements=0]
<<jednakosni_izraz>> [lvalue=false, elements=0]
<<odnosni_izraz>> [lvalue=false, elements=0]
<<aditivni_izraz>> [lvalue=false, elements=0]
<<multiplikativni_izraz>> [lvalue=false, elements=0]
<<cast_izraz>> [lvalue=false, elements=0]
<<unarni_izraz>> [lvalue=false, elements=0]
<<postfiks_izraz>> [lvalue=false, elements=0]
<<primarni_izraz>> [lvalue=false, elements=0]
BROJ (2,10) [type=int]
D_UGL_ZAGRADA (2,])
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (3,i) [symbol=i]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (4,for)
L_ZAGRADA (4,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
TOCKAZAREZ (4,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_LT (4,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,10) [type=int]
TOCKAZAREZ (4,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
PLUS (4,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,1) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (5,arr) [symbol=arr]
L_UGL_ZAGRADA (5,[)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
D_UGL_ZAGRADA (5,])
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
ASTERISK (5,*)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,2) [type=int]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (7,arr) [symbol=arr]
L_UGL_ZAGRADA (7,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,5) [type=int]
D_UGL_ZAGRADA (7,])
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable arr at (R7-4)
; Local variable i at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
; For loop with increment (TODO)
; Complex postfix expression (TODO)
LOAD R0, (R7-4) ; load variable arr
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
char c;
c = 'A';
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 KR_CHAR char
7 IDN c
8 TOCKAZAREZ ;
9 OP_PRIDRUZI =
10 ZNAK 'A'
11 KR_RETURN return
12 BROJ 0
13 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_CHAR 2 6
IDN 2 7
TOCKAZAREZ 2 8
IDN 3 7
OP_PRIDRUZI 3 9
ZNAK 3 10
TOCKAZAREZ 3 8
KR_RETURN 4 11
BROJ 4 12
TOCKAZAREZ 4 8
D_VIT_ZAGRADA 5 13
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_CHAR , char
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , c
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
ZNAK , 'A'
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_CHAR , char
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , c
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
ZNAK , 'A'
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
c : CHAR
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=CHAR, lvalue=false, elements=0]
<<specifikator_tipa>> [type=CHAR, lvalue=false, elements=0]
KR_CHAR (2,char)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=CHAR, lvalue=true, id=c, elements=0]
<<izravni_deklarator>> [type=CHAR, lvalue=true, id=c, elements=0]
IDN (2,c) [symbol=c]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=CHAR, lvalue=false, elements=0]
<<izraz>> [type=CHAR, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=CHAR, lvalue=false, elements=0]
<<unarni_izraz>> [type=CHAR, lvalue=true, elements=0]
<<postfiks_izraz>> [type=CHAR, lvalue=true, elements=0]
<<primarni_izraz>> [type=CHAR, lvalue=true, elements=0]
IDN (3,c) [symbol=c]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=CHAR, lvalue=false, elements=0]
<<log_ili_izraz>> [type=CHAR, lvalue=false, elements=0]
<<log_i_izraz>> [type=CHAR, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=CHAR, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=CHAR, lvalue=false, elements=0]
<<bin_i_izraz>> [type=CHAR, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<odnosni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<aditivni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<cast_izraz>> [type=CHAR, lvalue=false, elements=0]
<<unarni_izraz>> [type=CHAR, lvalue=false, elements=0]
<<postfiks_izraz>> [type=CHAR, lvalue=false, elements=0]
<<primarni_izraz>> [type=CHAR, lvalue=false, elements=0]
ZNAK (3,'A') [type=char]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (4,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
TOCKAZAREZ (4,;)
D_VIT_ZAGRADA (5,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable c at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 65, R0 ; load char ''A''
STORE R0, (R7-4) ; assign to c
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
float f;
f = 3.14159;
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 KR_FLOAT float
7 IDN f
8 TOCKAZAREZ ;
9 OP_PRIDRUZI =
10 BROJ 3.14159
11 KR_RETURN return
12 BROJ 0
13 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_FLOAT 2 6
IDN 2 7
TOCKAZAREZ 2 8
IDN 3 7
OP_PRIDRUZI 3 9
BROJ 3 10
TOCKAZAREZ 3 8
KR_RETURN 4 11
BROJ 4 12
TOCKAZAREZ 4 8
D_VIT_ZAGRADA 5 13
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_FLOAT , float
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , f
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , f
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3.14159
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_FLOAT , float
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , f
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , f
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3.14159
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<specifikator_tipa> ::= KR_FLOAT(2,float)
SEMANTIC ERRORS:
semantic error
const int MAX = 100;
int main(void) {
int x;
x = MAX;
return x;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_CONST const
1 KR_INT int
2 IDN MAX
3 OP_PRIDRUZI =
4 BROJ 100
5 TOCKAZAREZ ;
6 IDN main
7 L_ZAGRADA (
8 KR_VOID void
9 D_ZAGRADA )
10 L_VIT_ZAGRADA {
11 IDN x
12 KR_RETURN return
13 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_CONST 1 0
KR_INT 1 1
IDN 1 2
OP_PRIDRUZI 1 3
BROJ 1 4
TOCKAZAREZ 1 5
KR_INT 3 1
IDN 3 6
L_ZAGRADA 3 7
KR_VOID 3 8
D_ZAGRADA 3 9
L_VIT_ZAGRADA 3 10
KR_INT 4 1
IDN 4 11
TOCKAZAREZ 4 5
IDN 5 11
OP_PRIDRUZI 5 3
IDN 5 2
TOCKAZAREZ 5 5
KR_RETURN 6 12
IDN 6 11
TOCKAZAREZ 6 5
D_VIT_ZAGRADA 7 13
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_CONST , const
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , MAX
OP_PRIDRUZI , =
<inicijalizator>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 100
TOCKAZAREZ , ;
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , MAX
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_CONST , const
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , MAX
OP_PRIDRUZI , =
<inicijalizator>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 100
TOCKAZAREZ , ;
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , MAX
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
MAX : const INT (const)
main : INT () [defined]
Nested Scope 1:
x : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=const INT, lvalue=false, elements=0]
KR_CONST (1,const)
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=const INT, lvalue=true, id=MAX, elements=0]
<<izravni_deklarator>> [type=const INT, lvalue=true, id=MAX, elements=0]
IDN (1,MAX) [symbol=MAX]
OP_PRIDRUZI (1,=)
<<inicijalizator>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (1,100) [type=int]
TOCKAZAREZ (1,;)
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (3,main) [symbol=main]
L_ZAGRADA (3,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (3,void)
D_ZAGRADA (3,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (3,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (4,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (4,x) [symbol=x]
TOCKAZAREZ (4,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=const INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=const INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=const INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=const INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=const INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=const INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=const INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=const INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=const INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=const INT, lvalue=true, elements=0]
<<cast_izraz>> [type=const INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=const INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=const INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=const INT, lvalue=true, elements=0]
IDN (5,MAX) [symbol=MAX]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (6,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,x) [symbol=x]
TOCKAZAREZ (6,;)
D_VIT_ZAGRADA (7,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
LOAD R0, (G_MAX) ; load variable MAX
STORE R0, (R7-4) ; assign to x
LOAD R0, (R7-4) ; load variable x
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
G_MAX DW %D 0 ; global const ConstType[baseType=INT] MAX
int main(void) {
const int x = 5;
return x;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 KR_CONST const
7 IDN x
8 OP_PRIDRUZI =
9 BROJ 5
10 TOCKAZAREZ ;
11 KR_RETURN return
12 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_CONST 2 6
KR_INT 2 0
IDN 2 7
OP_PRIDRUZI 2 8
BROJ 2 9
TOCKAZAREZ 2 10
KR_RETURN 3 11
IDN 3 7
TOCKAZAREZ 3 10
D_VIT_ZAGRADA 4 12
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_CONST , const
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
OP_PRIDRUZI , =
<inicijalizator>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_CONST , const
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
OP_PRIDRUZI , =
<inicijalizator>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : const INT (const)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=const INT, lvalue=false, elements=0]
KR_CONST (2,const)
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=const INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=const INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
OP_PRIDRUZI (2,=)
<<inicijalizator>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (2,5) [type=int]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (3,return)
<<izraz>> [type=const INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=const INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=const INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=const INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=const INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=const INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=const INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=const INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=const INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=const INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=const INT, lvalue=true, elements=0]
<<cast_izraz>> [type=const INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=const INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=const INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=const INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
TOCKAZAREZ (3,;)
D_VIT_ZAGRADA (4,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
LOAD R0, (R7-4) ; load variable x
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int a;
int b;
int result;
a = 15;
b = 3;
result = a / b;
return result;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN a
7 TOCKAZAREZ ;
8 IDN b
9 IDN result
10 OP_PRIDRUZI =
11 BROJ 15
12 BROJ 3
13 OP_DIJELI /
14 KR_RETURN return
15 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
KR_INT 4 0
IDN 4 9
TOCKAZAREZ 4 7
IDN 5 6
OP_PRIDRUZI 5 10
BROJ 5 11
TOCKAZAREZ 5 7
IDN 6 8
OP_PRIDRUZI 6 10
BROJ 6 12
TOCKAZAREZ 6 7
IDN 7 9
OP_PRIDRUZI 7 10
IDN 7 6
OP_DIJELI 7 13
IDN 7 8
TOCKAZAREZ 7 7
KR_RETURN 8 14
IDN 8 9
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 15
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , a
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , b
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 15
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_DIJELI , /
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , a
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , b
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 15
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_DIJELI , /
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
a : INT
b : INT
result : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=a, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=a, elements=0]
IDN (2,a) [symbol=a]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=b, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=b, elements=0]
IDN (3,b) [symbol=b]
TOCKAZAREZ (3,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (4,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=result, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=result, elements=0]
IDN (4,result) [symbol=result]
TOCKAZAREZ (4,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,a) [symbol=a]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,15) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,b) [symbol=b]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,3) [type=int]
TOCKAZAREZ (6,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,result) [symbol=result]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,a) [symbol=a]
OP_DIJELI (7,/)
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,b) [symbol=b]
TOCKAZAREZ (7,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,result) [symbol=result]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable a at (R7-4)
; Local variable b at (R7-8)
; Local variable result at (R7-12)
SUB R7, 12, R7 ; allocate 3 local variables
; Compound statement
; Local declarations (TODO)
MOVE 15, R0 ; load constant 15
STORE R0, (R7-4) ; assign to a
MOVE 3, R0 ; load constant 3
STORE R0, (R7-8) ; assign to b
LOAD R0, (R7-4) ; load variable a
PUSH R0 ; save left operand
LOAD R0, (R7-8) ; load variable b
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Division not implemented (TODO)
STORE R0, (R7-12) ; assign to result
LOAD R0, (R7-12) ; load variable result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 12, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int find_max(int arr[], int n) {
int i;
int max_val;
max_val = arr[0];
for (i = 1; i < n; i = i + 1) {
if (arr[i] > max_val) {
max_val = arr[i];
}
}
return max_val;
}
int main(void) {
int arr[5];
arr[0] = 3;
arr[1] = 7;
arr[2] = 2;
arr[3] = 9;
arr[4] = 1;
return find_max(arr, 5);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN find_max
2 L_ZAGRADA (
3 IDN arr
4 L_UGL_ZAGRADA [
5 D_UGL_ZAGRADA ]
6 ZAREZ ,
7 IDN n
8 D_ZAGRADA )
9 L_VIT_ZAGRADA {
10 IDN i
11 TOCKAZAREZ ;
12 IDN max_val
13 OP_PRIDRUZI =
14 BROJ 0
15 KR_FOR for
16 BROJ 1
17 OP_LT <
18 PLUS +
19 KR_IF if
20 OP_GT >
21 D_VIT_ZAGRADA }
22 KR_RETURN return
23 IDN main
24 KR_VOID void
25 BROJ 5
26 BROJ 3
27 BROJ 7
28 BROJ 2
29 BROJ 9
30 BROJ 4
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
L_UGL_ZAGRADA 1 4
D_UGL_ZAGRADA 1 5
ZAREZ 1 6
KR_INT 1 0
IDN 1 7
D_ZAGRADA 1 8
L_VIT_ZAGRADA 1 9
KR_INT 2 0
IDN 2 10
TOCKAZAREZ 2 11
KR_INT 3 0
IDN 3 12
TOCKAZAREZ 3 11
IDN 4 12
OP_PRIDRUZI 4 13
IDN 4 3
L_UGL_ZAGRADA 4 4
BROJ 4 14
D_UGL_ZAGRADA 4 5
TOCKAZAREZ 4 11
KR_FOR 5 15
L_ZAGRADA 5 2
IDN 5 10
OP_PRIDRUZI 5 13
BROJ 5 16
TOCKAZAREZ 5 11
IDN 5 10
OP_LT 5 17
IDN 5 7
TOCKAZAREZ 5 11
IDN 5 10
OP_PRIDRUZI 5 13
IDN 5 10
PLUS 5 18
BROJ 5 16
D_ZAGRADA 5 8
L_VIT_ZAGRADA 5 9
KR_IF 6 19
L_ZAGRADA 6 2
IDN 6 3
L_UGL_ZAGRADA 6 4
IDN 6 10
D_UGL_ZAGRADA 6 5
OP_GT 6 20
IDN 6 12
D_ZAGRADA 6 8
L_VIT_ZAGRADA 6 9
IDN 7 12
OP_PRIDRUZI 7 13
IDN 7 3
L_UGL_ZAGRADA 7 4
IDN 7 10
D_UGL_ZAGRADA 7 5
TOCKAZAREZ 7 11
D_VIT_ZAGRADA 8 21
D_VIT_ZAGRADA 9 21
KR_RETURN 10 22
IDN 10 12
TOCKAZAREZ 10 11
D_VIT_ZAGRADA 11 21
KR_INT 13 0
IDN 13 23
L_ZAGRADA 13 2
KR_VOID 13 24
D_ZAGRADA 13 8
L_VIT_ZAGRADA 13 9
KR_INT 14 0
IDN 14 3
L_UGL_ZAGRADA 14 4
BROJ 14 25
D_UGL_ZAGRADA 14 5
TOCKAZAREZ 14 11
IDN 15 3
L_UGL_ZAGRADA 15 4
BROJ 15 14
D_UGL_ZAGRADA 15 5
OP_PRIDRUZI 15 13
BROJ 15 26
TOCKAZAREZ 15 11
IDN 16 3
L_UGL_ZAGRADA 16 4
BROJ 16 16
D_UGL_ZAGRADA 16 5
OP_PRIDRUZI 16 13
BROJ 16 27
TOCKAZAREZ 16 11
IDN 17 3
L_UGL_ZAGRADA 17 4
BROJ 17 28
D_UGL_ZAGRADA 17 5
OP_PRIDRUZI 17 13
BROJ 17 28
TOCKAZAREZ 17 11
IDN 18 3
L_UGL_ZAGRADA 18 4
BROJ 18 26
D_UGL_ZAGRADA 18 5
OP_PRIDRUZI 18 13
BROJ 18 29
TOCKAZAREZ 18 11
IDN 19 3
L_UGL_ZAGRADA 19 4
BROJ 19 30
D_UGL_ZAGRADA 19 5
OP_PRIDRUZI 19 13
BROJ 19 16
TOCKAZAREZ 19 11
KR_RETURN 20 22
IDN 20 1
L_ZAGRADA 20 2
IDN 20 3
ZAREZ 20 6
BROJ 20 25
D_ZAGRADA 20 8
TOCKAZAREZ 20 11
D_VIT_ZAGRADA 21 21
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , find_max
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
D_UGL_ZAGRADA , ]
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , max_val
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , max_val
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
D_UGL_ZAGRADA , ]
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , max_val
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , max_val
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , max_val
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 9
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , find_max
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , find_max
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
D_UGL_ZAGRADA , ]
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , max_val
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , max_val
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
D_UGL_ZAGRADA , ]
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , max_val
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , max_val
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , max_val
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 9
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , find_max
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
find_max : INT (array(INT), INT) [defined]
main : INT () [defined]
Nested Scope 1:
arr : array(INT)
i : INT
max_val : INT
n : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
Nested Scope 2:
arr : array(INT)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(array(INT), INT), lvalue=false, id=find_max, elements=0]
<<izravni_deklarator>> [type=INT(array(INT), INT), lvalue=false, id=find_max, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=find_max, elements=0]
IDN (1,find_max) [symbol=find_max]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<izravni_deklarator>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=arr, elements=0]
IDN (1,arr) [symbol=arr]
L_UGL_ZAGRADA (1,[)
D_UGL_ZAGRADA (1,])
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=n, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=n, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=n, elements=0]
IDN (1,n) [symbol=n]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=max_val, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=max_val, elements=0]
IDN (3,max_val) [symbol=max_val]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,max_val) [symbol=max_val]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (4,arr) [symbol=arr]
L_UGL_ZAGRADA (4,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
D_UGL_ZAGRADA (4,])
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (5,for)
L_ZAGRADA (5,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_LT (5,<)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,n) [symbol=n]
TOCKAZAREZ (5,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
PLUS (5,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
D_ZAGRADA (5,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (5,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (6,if)
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (6,arr) [symbol=arr]
L_UGL_ZAGRADA (6,[)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
D_UGL_ZAGRADA (6,])
OP_GT (6,>)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,max_val) [symbol=max_val]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,max_val) [symbol=max_val]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (7,arr) [symbol=arr]
L_UGL_ZAGRADA (7,[)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,i) [symbol=i]
D_UGL_ZAGRADA (7,])
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
D_VIT_ZAGRADA (9,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (10,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (10,max_val) [symbol=max_val]
TOCKAZAREZ (10,;)
D_VIT_ZAGRADA (11,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (13,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (13,main) [symbol=main]
L_ZAGRADA (13,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (13,void)
D_ZAGRADA (13,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (13,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (14,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=array(INT), lvalue=false, id=arr, elements=5]
<<izravni_deklarator>> [type=array(INT), lvalue=false, id=arr, elements=5]
<<izravni_deklarator>> [type=INT, lvalue=true, id=arr, elements=0]
IDN (14,arr) [symbol=arr]
L_UGL_ZAGRADA (14,[)
<<log_ili_izraz>> [lvalue=false, elements=0]
<<log_i_izraz>> [lvalue=false, elements=0]
<<bin_ili_izraz>> [lvalue=false, elements=0]
<<bin_xili_izraz>> [lvalue=false, elements=0]
<<bin_i_izraz>> [lvalue=false, elements=0]
<<jednakosni_izraz>> [lvalue=false, elements=0]
<<odnosni_izraz>> [lvalue=false, elements=0]
<<aditivni_izraz>> [lvalue=false, elements=0]
<<multiplikativni_izraz>> [lvalue=false, elements=0]
<<cast_izraz>> [lvalue=false, elements=0]
<<unarni_izraz>> [lvalue=false, elements=0]
<<postfiks_izraz>> [lvalue=false, elements=0]
<<primarni_izraz>> [lvalue=false, elements=0]
BROJ (14,5) [type=int]
D_UGL_ZAGRADA (14,])
TOCKAZAREZ (14,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (15,arr) [symbol=arr]
L_UGL_ZAGRADA (15,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (15,0) [type=int]
D_UGL_ZAGRADA (15,])
OP_PRIDRUZI (15,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (15,3) [type=int]
TOCKAZAREZ (15,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (16,arr) [symbol=arr]
L_UGL_ZAGRADA (16,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (16,1) [type=int]
D_UGL_ZAGRADA (16,])
OP_PRIDRUZI (16,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (16,7) [type=int]
TOCKAZAREZ (16,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (17,arr) [symbol=arr]
L_UGL_ZAGRADA (17,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (17,2) [type=int]
D_UGL_ZAGRADA (17,])
OP_PRIDRUZI (17,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (17,2) [type=int]
TOCKAZAREZ (17,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (18,arr) [symbol=arr]
L_UGL_ZAGRADA (18,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (18,3) [type=int]
D_UGL_ZAGRADA (18,])
OP_PRIDRUZI (18,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (18,9) [type=int]
TOCKAZAREZ (18,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (19,arr) [symbol=arr]
L_UGL_ZAGRADA (19,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (19,4) [type=int]
D_UGL_ZAGRADA (19,])
OP_PRIDRUZI (19,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (19,1) [type=int]
TOCKAZAREZ (19,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (20,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(array(INT), INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(array(INT), INT), lvalue=false, elements=0]
IDN (20,find_max) [symbol=find_max]
L_ZAGRADA (20,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=array(INT), lvalue=false, elements=0]
<<log_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<log_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_xili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<jednakosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<odnosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<aditivni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<cast_izraz>> [type=array(INT), lvalue=false, elements=0]
<<unarni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (20,arr) [symbol=arr]
ZAREZ (20,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (20,5) [type=int]
D_ZAGRADA (20,))
TOCKAZAREZ (20,;)
D_VIT_ZAGRADA (21,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_FIND_MAX ; Function find_max
; Parameter arr at (R7+8)
; Parameter n at (R7+12)
; Local variable i at (R7-4)
; Local variable max_val at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
; Complex postfix expression (TODO)
LOAD R0, (R7+8) ; load variable arr
STORE R0, (R7-8) ; assign to max_val
; For loop with increment (TODO)
LOAD R0, (R7-8) ; load variable max_val
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from find_max
F_MAIN ; Function main
; Local variable arr at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 3, R0 ; load constant 3
STORE R0, (R7-4) ; assign to arr
MOVE 7, R0 ; load constant 7
STORE R0, (R7-4) ; assign to arr
MOVE 2, R0 ; load constant 2
STORE R0, (R7-4) ; assign to arr
MOVE 9, R0 ; load constant 9
STORE R0, (R7-4) ; assign to arr
MOVE 1, R0 ; load constant 1
STORE R0, (R7-4) ; assign to arr
; Function call: find_max
MOVE 5, R0 ; load constant 5
PUSH R0 ; push argument 2
LOAD R0, (R7-4) ; load variable arr
PUSH R0 ; push argument 1
CALL F_FIND_MAX ; call find_max
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int linear_search(int arr[], int n, int key) {
int i;
for (i = 0; i < n; i = i + 1) {
if (arr[i] == key) {
return i;
}
}
return -1;
}
int main(void) {
int arr[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
return linear_search(arr, 5, 30);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN linear_search
2 L_ZAGRADA (
3 IDN arr
4 L_UGL_ZAGRADA [
5 D_UGL_ZAGRADA ]
6 ZAREZ ,
7 IDN n
8 IDN key
9 D_ZAGRADA )
10 L_VIT_ZAGRADA {
11 IDN i
12 TOCKAZAREZ ;
13 KR_FOR for
14 OP_PRIDRUZI =
15 BROJ 0
16 OP_LT <
17 PLUS +
18 BROJ 1
19 KR_IF if
20 OP_EQ ==
21 KR_RETURN return
22 D_VIT_ZAGRADA }
23 MINUS -
24 IDN main
25 KR_VOID void
26 BROJ 5
27 BROJ 10
28 BROJ 20
29 BROJ 2
30 BROJ 30
31 BROJ 3
32 BROJ 40
33 BROJ 4
34 BROJ 50
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
L_UGL_ZAGRADA 1 4
D_UGL_ZAGRADA 1 5
ZAREZ 1 6
KR_INT 1 0
IDN 1 7
ZAREZ 1 6
KR_INT 1 0
IDN 1 8
D_ZAGRADA 1 9
L_VIT_ZAGRADA 1 10
KR_INT 2 0
IDN 2 11
TOCKAZAREZ 2 12
KR_FOR 3 13
L_ZAGRADA 3 2
IDN 3 11
OP_PRIDRUZI 3 14
BROJ 3 15
TOCKAZAREZ 3 12
IDN 3 11
OP_LT 3 16
IDN 3 7
TOCKAZAREZ 3 12
IDN 3 11
OP_PRIDRUZI 3 14
IDN 3 11
PLUS 3 17
BROJ 3 18
D_ZAGRADA 3 9
L_VIT_ZAGRADA 3 10
KR_IF 4 19
L_ZAGRADA 4 2
IDN 4 3
L_UGL_ZAGRADA 4 4
IDN 4 11
D_UGL_ZAGRADA 4 5
OP_EQ 4 20
IDN 4 8
D_ZAGRADA 4 9
L_VIT_ZAGRADA 4 10
KR_RETURN 5 21
IDN 5 11
TOCKAZAREZ 5 12
D_VIT_ZAGRADA 6 22
D_VIT_ZAGRADA 7 22
KR_RETURN 8 21
MINUS 8 23
BROJ 8 18
TOCKAZAREZ 8 12
D_VIT_ZAGRADA 9 22
KR_INT 11 0
IDN 11 24
L_ZAGRADA 11 2
KR_VOID 11 25
D_ZAGRADA 11 9
L_VIT_ZAGRADA 11 10
KR_INT 12 0
IDN 12 3
L_UGL_ZAGRADA 12 4
BROJ 12 26
D_UGL_ZAGRADA 12 5
TOCKAZAREZ 12 12
IDN 13 3
L_UGL_ZAGRADA 13 4
BROJ 13 15
D_UGL_ZAGRADA 13 5
OP_PRIDRUZI 13 14
BROJ 13 27
TOCKAZAREZ 13 12
IDN 14 3
L_UGL_ZAGRADA 14 4
BROJ 14 18
D_UGL_ZAGRADA 14 5
OP_PRIDRUZI 14 14
BROJ 14 28
TOCKAZAREZ 14 12
IDN 15 3
L_UGL_ZAGRADA 15 4
BROJ 15 29
D_UGL_ZAGRADA 15 5
OP_PRIDRUZI 15 14
BROJ 15 30
TOCKAZAREZ 15 12
IDN 16 3
L_UGL_ZAGRADA 16 4
BROJ 16 31
D_UGL_ZAGRADA 16 5
OP_PRIDRUZI 16 14
BROJ 16 32
TOCKAZAREZ 16 12
IDN 17 3
L_UGL_ZAGRADA 17 4
BROJ 17 33
D_UGL_ZAGRADA 17 5
OP_PRIDRUZI 17 14
BROJ 17 34
TOCKAZAREZ 17 12
KR_RETURN 18 21
IDN 18 1
L_ZAGRADA 18 2
IDN 18 3
ZAREZ 18 6
BROJ 18 26
ZAREZ 18 6
BROJ 18 30
D_ZAGRADA 18 9
TOCKAZAREZ 18 12
D_VIT_ZAGRADA 19 22
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , linear_search
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
D_UGL_ZAGRADA , ]
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , key
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
D_UGL_ZAGRADA , ]
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , key
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
MINUS , -
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 30
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 40
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 50
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , linear_search
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 30
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , linear_search
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
D_UGL_ZAGRADA , ]
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , key
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
D_UGL_ZAGRADA , ]
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , key
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
MINUS , -
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 30
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 40
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 50
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , linear_search
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 30
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
linear_search : INT (array(INT), INT, INT) [defined]
main : INT () [defined]
Nested Scope 1:
arr : array(INT)
i : INT
key : INT
n : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
Nested Scope 2:
arr : array(INT)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(array(INT), INT, INT), lvalue=false, id=linear_search, elements=0]
<<izravni_deklarator>> [type=INT(array(INT), INT, INT), lvalue=false, id=linear_search, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=linear_search, elements=0]
IDN (1,linear_search) [symbol=linear_search]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<izravni_deklarator>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=arr, elements=0]
IDN (1,arr) [symbol=arr]
L_UGL_ZAGRADA (1,[)
D_UGL_ZAGRADA (1,])
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=n, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=n, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=n, elements=0]
IDN (1,n) [symbol=n]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=key, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=key, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=key, elements=0]
IDN (1,key) [symbol=key]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (3,for)
L_ZAGRADA (3,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
TOCKAZAREZ (3,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_LT (3,<)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,n) [symbol=n]
TOCKAZAREZ (3,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
PLUS (3,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,1) [type=int]
D_ZAGRADA (3,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (3,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (4,if)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (4,arr) [symbol=arr]
L_UGL_ZAGRADA (4,[)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
D_UGL_ZAGRADA (4,])
OP_EQ (4,==)
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,key) [symbol=key]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
D_VIT_ZAGRADA (7,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_operator>> [lvalue=false, elements=0]
MINUS (8,-)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (8,1) [type=int]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (11,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (11,main) [symbol=main]
L_ZAGRADA (11,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (11,void)
D_ZAGRADA (11,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (11,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (12,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=array(INT), lvalue=false, id=arr, elements=5]
<<izravni_deklarator>> [type=array(INT), lvalue=false, id=arr, elements=5]
<<izravni_deklarator>> [type=INT, lvalue=true, id=arr, elements=0]
IDN (12,arr) [symbol=arr]
L_UGL_ZAGRADA (12,[)
<<log_ili_izraz>> [lvalue=false, elements=0]
<<log_i_izraz>> [lvalue=false, elements=0]
<<bin_ili_izraz>> [lvalue=false, elements=0]
<<bin_xili_izraz>> [lvalue=false, elements=0]
<<bin_i_izraz>> [lvalue=false, elements=0]
<<jednakosni_izraz>> [lvalue=false, elements=0]
<<odnosni_izraz>> [lvalue=false, elements=0]
<<aditivni_izraz>> [lvalue=false, elements=0]
<<multiplikativni_izraz>> [lvalue=false, elements=0]
<<cast_izraz>> [lvalue=false, elements=0]
<<unarni_izraz>> [lvalue=false, elements=0]
<<postfiks_izraz>> [lvalue=false, elements=0]
<<primarni_izraz>> [lvalue=false, elements=0]
BROJ (12,5) [type=int]
D_UGL_ZAGRADA (12,])
TOCKAZAREZ (12,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (13,arr) [symbol=arr]
L_UGL_ZAGRADA (13,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (13,0) [type=int]
D_UGL_ZAGRADA (13,])
OP_PRIDRUZI (13,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (13,10) [type=int]
TOCKAZAREZ (13,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (14,arr) [symbol=arr]
L_UGL_ZAGRADA (14,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (14,1) [type=int]
D_UGL_ZAGRADA (14,])
OP_PRIDRUZI (14,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (14,20) [type=int]
TOCKAZAREZ (14,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (15,arr) [symbol=arr]
L_UGL_ZAGRADA (15,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (15,2) [type=int]
D_UGL_ZAGRADA (15,])
OP_PRIDRUZI (15,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (15,30) [type=int]
TOCKAZAREZ (15,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (16,arr) [symbol=arr]
L_UGL_ZAGRADA (16,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (16,3) [type=int]
D_UGL_ZAGRADA (16,])
OP_PRIDRUZI (16,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (16,40) [type=int]
TOCKAZAREZ (16,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (17,arr) [symbol=arr]
L_UGL_ZAGRADA (17,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (17,4) [type=int]
D_UGL_ZAGRADA (17,])
OP_PRIDRUZI (17,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (17,50) [type=int]
TOCKAZAREZ (17,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (18,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(array(INT), INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(array(INT), INT, INT), lvalue=false, elements=0]
IDN (18,linear_search) [symbol=linear_search]
L_ZAGRADA (18,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=array(INT), lvalue=false, elements=0]
<<log_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<log_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_xili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<jednakosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<odnosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<aditivni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<cast_izraz>> [type=array(INT), lvalue=false, elements=0]
<<unarni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (18,arr) [symbol=arr]
ZAREZ (18,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (18,5) [type=int]
ZAREZ (18,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (18,30) [type=int]
D_ZAGRADA (18,))
TOCKAZAREZ (18,;)
D_VIT_ZAGRADA (19,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_LINEAR_SEARCH ; Function linear_search
; Parameter arr at (R7+8)
; Parameter n at (R7+12)
; Parameter key at (R7+16)
; Local variable i at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
; For loop with increment (TODO)
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from linear_search
F_MAIN ; Function main
; Local variable arr at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 10, R0 ; load constant 10
STORE R0, (R7-4) ; assign to arr
MOVE 20, R0 ; load constant 20
STORE R0, (R7-4) ; assign to arr
MOVE 30, R0 ; load constant 30
STORE R0, (R7-4) ; assign to arr
MOVE 40, R0 ; load constant 40
STORE R0, (R7-4) ; assign to arr
MOVE 50, R0 ; load constant 50
STORE R0, (R7-4) ; assign to arr
; Function call: linear_search
MOVE 30, R0 ; load constant 30
PUSH R0 ; push argument 3
MOVE 5, R0 ; load constant 5
PUSH R0 ; push argument 2
LOAD R0, (R7-4) ; load variable arr
PUSH R0 ; push argument 1
CALL F_LINEAR_SEARCH ; call linear_search
ADD R7, 12, R7 ; cleanup 3 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int binary_search_recursive(int arr[], int left, int right, int key) {
int mid;
if (left > right) {
return -1;
}
mid = (left + right) / 2;
if (arr[mid] == key) {
return mid;
}
if (arr[mid] > key) {
return binary_search_recursive(arr, left, mid - 1, key);
}
return binary_search_recursive(arr, mid + 1, right, key);
}
int main(void) {
int arr[5];
arr[0] = 1;
arr[1] = 3;
arr[2] = 5;
arr[3] = 7;
arr[4] = 9;
return binary_search_recursive(arr, 0, 4, 5);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN binary_search_recursive
2 L_ZAGRADA (
3 IDN arr
4 L_UGL_ZAGRADA [
5 D_UGL_ZAGRADA ]
6 ZAREZ ,
7 IDN left
8 IDN right
9 IDN key
10 D_ZAGRADA )
11 L_VIT_ZAGRADA {
12 IDN mid
13 TOCKAZAREZ ;
14 KR_IF if
15 OP_GT >
16 KR_RETURN return
17 MINUS -
18 BROJ 1
19 D_VIT_ZAGRADA }
20 OP_PRIDRUZI =
21 PLUS +
22 OP_DIJELI /
23 BROJ 2
24 OP_EQ ==
25 IDN main
26 KR_VOID void
27 BROJ 5
28 BROJ 0
29 BROJ 3
30 BROJ 7
31 BROJ 4
32 BROJ 9
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
L_UGL_ZAGRADA 1 4
D_UGL_ZAGRADA 1 5
ZAREZ 1 6
KR_INT 1 0
IDN 1 7
ZAREZ 1 6
KR_INT 1 0
IDN 1 8
ZAREZ 1 6
KR_INT 1 0
IDN 1 9
D_ZAGRADA 1 10
L_VIT_ZAGRADA 1 11
KR_INT 2 0
IDN 2 12
TOCKAZAREZ 2 13
KR_IF 3 14
L_ZAGRADA 3 2
IDN 3 7
OP_GT 3 15
IDN 3 8
D_ZAGRADA 3 10
L_VIT_ZAGRADA 3 11
KR_RETURN 4 16
MINUS 4 17
BROJ 4 18
TOCKAZAREZ 4 13
D_VIT_ZAGRADA 5 19
IDN 6 12
OP_PRIDRUZI 6 20
L_ZAGRADA 6 2
IDN 6 7
PLUS 6 21
IDN 6 8
D_ZAGRADA 6 10
OP_DIJELI 6 22
BROJ 6 23
TOCKAZAREZ 6 13
KR_IF 7 14
L_ZAGRADA 7 2
IDN 7 3
L_UGL_ZAGRADA 7 4
IDN 7 12
D_UGL_ZAGRADA 7 5
OP_EQ 7 24
IDN 7 9
D_ZAGRADA 7 10
L_VIT_ZAGRADA 7 11
KR_RETURN 8 16
IDN 8 12
TOCKAZAREZ 8 13
D_VIT_ZAGRADA 9 19
KR_IF 10 14
L_ZAGRADA 10 2
IDN 10 3
L_UGL_ZAGRADA 10 4
IDN 10 12
D_UGL_ZAGRADA 10 5
OP_GT 10 15
IDN 10 9
D_ZAGRADA 10 10
L_VIT_ZAGRADA 10 11
KR_RETURN 11 16
IDN 11 1
L_ZAGRADA 11 2
IDN 11 3
ZAREZ 11 6
IDN 11 7
ZAREZ 11 6
IDN 11 12
MINUS 11 17
BROJ 11 18
ZAREZ 11 6
IDN 11 9
D_ZAGRADA 11 10
TOCKAZAREZ 11 13
D_VIT_ZAGRADA 12 19
KR_RETURN 13 16
IDN 13 1
L_ZAGRADA 13 2
IDN 13 3
ZAREZ 13 6
IDN 13 12
PLUS 13 21
BROJ 13 18
ZAREZ 13 6
IDN 13 8
ZAREZ 13 6
IDN 13 9
D_ZAGRADA 13 10
TOCKAZAREZ 13 13
D_VIT_ZAGRADA 14 19
KR_INT 16 0
IDN 16 25
L_ZAGRADA 16 2
KR_VOID 16 26
D_ZAGRADA 16 10
L_VIT_ZAGRADA 16 11
KR_INT 17 0
IDN 17 3
L_UGL_ZAGRADA 17 4
BROJ 17 27
D_UGL_ZAGRADA 17 5
TOCKAZAREZ 17 13
IDN 18 3
L_UGL_ZAGRADA 18 4
BROJ 18 28
D_UGL_ZAGRADA 18 5
OP_PRIDRUZI 18 20
BROJ 18 18
TOCKAZAREZ 18 13
IDN 19 3
L_UGL_ZAGRADA 19 4
BROJ 19 18
D_UGL_ZAGRADA 19 5
OP_PRIDRUZI 19 20
BROJ 19 29
TOCKAZAREZ 19 13
IDN 20 3
L_UGL_ZAGRADA 20 4
BROJ 20 23
D_UGL_ZAGRADA 20 5
OP_PRIDRUZI 20 20
BROJ 20 27
TOCKAZAREZ 20 13
IDN 21 3
L_UGL_ZAGRADA 21 4
BROJ 21 29
D_UGL_ZAGRADA 21 5
OP_PRIDRUZI 21 20
BROJ 21 30
TOCKAZAREZ 21 13
IDN 22 3
L_UGL_ZAGRADA 22 4
BROJ 22 31
D_UGL_ZAGRADA 22 5
OP_PRIDRUZI 22 20
BROJ 22 32
TOCKAZAREZ 22 13
KR_RETURN 23 16
IDN 23 1
L_ZAGRADA 23 2
IDN 23 3
ZAREZ 23 6
BROJ 23 28
ZAREZ 23 6
BROJ 23 31
ZAREZ 23 6
BROJ 23 27
D_ZAGRADA 23 10
TOCKAZAREZ 23 13
D_VIT_ZAGRADA 24 19
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , binary_search_recursive
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
D_UGL_ZAGRADA , ]
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , left
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , right
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , key
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , mid
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , left
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , right
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
MINUS , -
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , mid
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , left
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , right
D_ZAGRADA , )
OP_DIJELI , /
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , mid
D_UGL_ZAGRADA , ]
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , key
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , mid
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , mid
D_UGL_ZAGRADA , ]
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , key
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , binary_search_recursive
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , left
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , mid
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , key
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , binary_search_recursive
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , mid
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , right
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , key
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 9
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , binary_search_recursive
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , binary_search_recursive
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
D_UGL_ZAGRADA , ]
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , left
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , right
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , key
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , mid
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , left
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , right
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
MINUS , -
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , mid
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , left
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , right
D_ZAGRADA , )
OP_DIJELI , /
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , mid
D_UGL_ZAGRADA , ]
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , key
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , mid
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , mid
D_UGL_ZAGRADA , ]
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , key
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , binary_search_recursive
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , left
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , mid
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , key
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , binary_search_recursive
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , mid
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , right
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , key
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 9
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , binary_search_recursive
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
binary_search_recursive : INT (array(INT), INT, INT, INT) [defined]
main : INT () [defined]
Nested Scope 1:
arr : array(INT)
key : INT
left : INT
mid : INT
right : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
Nested Scope 3:
(no symbols)
Nested Scope 2:
arr : array(INT)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(array(INT), INT, INT, INT), lvalue=false, id=binary_search_recursive, elements=0]
<<izravni_deklarator>> [type=INT(array(INT), INT, INT, INT), lvalue=false, id=binary_search_recursive, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=binary_search_recursive, elements=0]
IDN (1,binary_search_recursive) [symbol=binary_search_recursive]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<izravni_deklarator>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=arr, elements=0]
IDN (1,arr) [symbol=arr]
L_UGL_ZAGRADA (1,[)
D_UGL_ZAGRADA (1,])
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=left, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=left, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=left, elements=0]
IDN (1,left) [symbol=left]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=right, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=right, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=right, elements=0]
IDN (1,right) [symbol=right]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=key, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=key, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=key, elements=0]
IDN (1,key) [symbol=key]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=mid, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=mid, elements=0]
IDN (2,mid) [symbol=mid]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (3,if)
L_ZAGRADA (3,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,left) [symbol=left]
OP_GT (3,>)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,right) [symbol=right]
D_ZAGRADA (3,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (3,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (4,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_operator>> [lvalue=false, elements=0]
MINUS (4,-)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,1) [type=int]
TOCKAZAREZ (4,;)
D_VIT_ZAGRADA (5,})
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,mid) [symbol=mid]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,left) [symbol=left]
PLUS (6,+)
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,right) [symbol=right]
D_ZAGRADA (6,))
OP_DIJELI (6,/)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,2) [type=int]
TOCKAZAREZ (6,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (7,if)
L_ZAGRADA (7,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (7,arr) [symbol=arr]
L_UGL_ZAGRADA (7,[)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,mid) [symbol=mid]
D_UGL_ZAGRADA (7,])
OP_EQ (7,==)
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,key) [symbol=key]
D_ZAGRADA (7,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (7,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,mid) [symbol=mid]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (10,if)
L_ZAGRADA (10,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (10,arr) [symbol=arr]
L_UGL_ZAGRADA (10,[)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (10,mid) [symbol=mid]
D_UGL_ZAGRADA (10,])
OP_GT (10,>)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (10,key) [symbol=key]
D_ZAGRADA (10,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (10,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (11,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(array(INT), INT, INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(array(INT), INT, INT, INT), lvalue=false, elements=0]
IDN (11,binary_search_recursive) [symbol=binary_search_recursive]
L_ZAGRADA (11,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=array(INT), lvalue=false, elements=0]
<<log_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<log_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_xili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<jednakosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<odnosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<aditivni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<cast_izraz>> [type=array(INT), lvalue=false, elements=0]
<<unarni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (11,arr) [symbol=arr]
ZAREZ (11,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (11,left) [symbol=left]
ZAREZ (11,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (11,mid) [symbol=mid]
MINUS (11,-)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (11,1) [type=int]
ZAREZ (11,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (11,key) [symbol=key]
D_ZAGRADA (11,))
TOCKAZAREZ (11,;)
D_VIT_ZAGRADA (12,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (13,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(array(INT), INT, INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(array(INT), INT, INT, INT), lvalue=false, elements=0]
IDN (13,binary_search_recursive) [symbol=binary_search_recursive]
L_ZAGRADA (13,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=array(INT), lvalue=false, elements=0]
<<log_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<log_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_xili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<jednakosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<odnosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<aditivni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<cast_izraz>> [type=array(INT), lvalue=false, elements=0]
<<unarni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (13,arr) [symbol=arr]
ZAREZ (13,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (13,mid) [symbol=mid]
PLUS (13,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (13,1) [type=int]
ZAREZ (13,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (13,right) [symbol=right]
ZAREZ (13,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (13,key) [symbol=key]
D_ZAGRADA (13,))
TOCKAZAREZ (13,;)
D_VIT_ZAGRADA (14,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (16,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (16,main) [symbol=main]
L_ZAGRADA (16,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (16,void)
D_ZAGRADA (16,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (16,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (17,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=array(INT), lvalue=false, id=arr, elements=5]
<<izravni_deklarator>> [type=array(INT), lvalue=false, id=arr, elements=5]
<<izravni_deklarator>> [type=INT, lvalue=true, id=arr, elements=0]
IDN (17,arr) [symbol=arr]
L_UGL_ZAGRADA (17,[)
<<log_ili_izraz>> [lvalue=false, elements=0]
<<log_i_izraz>> [lvalue=false, elements=0]
<<bin_ili_izraz>> [lvalue=false, elements=0]
<<bin_xili_izraz>> [lvalue=false, elements=0]
<<bin_i_izraz>> [lvalue=false, elements=0]
<<jednakosni_izraz>> [lvalue=false, elements=0]
<<odnosni_izraz>> [lvalue=false, elements=0]
<<aditivni_izraz>> [lvalue=false, elements=0]
<<multiplikativni_izraz>> [lvalue=false, elements=0]
<<cast_izraz>> [lvalue=false, elements=0]
<<unarni_izraz>> [lvalue=false, elements=0]
<<postfiks_izraz>> [lvalue=false, elements=0]
<<primarni_izraz>> [lvalue=false, elements=0]
BROJ (17,5) [type=int]
D_UGL_ZAGRADA (17,])
TOCKAZAREZ (17,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (18,arr) [symbol=arr]
L_UGL_ZAGRADA (18,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (18,0) [type=int]
D_UGL_ZAGRADA (18,])
OP_PRIDRUZI (18,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (18,1) [type=int]
TOCKAZAREZ (18,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (19,arr) [symbol=arr]
L_UGL_ZAGRADA (19,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (19,1) [type=int]
D_UGL_ZAGRADA (19,])
OP_PRIDRUZI (19,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (19,3) [type=int]
TOCKAZAREZ (19,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (20,arr) [symbol=arr]
L_UGL_ZAGRADA (20,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (20,2) [type=int]
D_UGL_ZAGRADA (20,])
OP_PRIDRUZI (20,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (20,5) [type=int]
TOCKAZAREZ (20,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (21,arr) [symbol=arr]
L_UGL_ZAGRADA (21,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (21,3) [type=int]
D_UGL_ZAGRADA (21,])
OP_PRIDRUZI (21,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (21,7) [type=int]
TOCKAZAREZ (21,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (22,arr) [symbol=arr]
L_UGL_ZAGRADA (22,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (22,4) [type=int]
D_UGL_ZAGRADA (22,])
OP_PRIDRUZI (22,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (22,9) [type=int]
TOCKAZAREZ (22,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (23,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(array(INT), INT, INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(array(INT), INT, INT, INT), lvalue=false, elements=0]
IDN (23,binary_search_recursive) [symbol=binary_search_recursive]
L_ZAGRADA (23,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=array(INT), lvalue=false, elements=0]
<<log_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<log_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_xili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<jednakosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<odnosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<aditivni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<cast_izraz>> [type=array(INT), lvalue=false, elements=0]
<<unarni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (23,arr) [symbol=arr]
ZAREZ (23,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (23,0) [type=int]
ZAREZ (23,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (23,4) [type=int]
ZAREZ (23,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (23,5) [type=int]
D_ZAGRADA (23,))
TOCKAZAREZ (23,;)
D_VIT_ZAGRADA (24,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_BINARY_SEARCH_RECURSIVE ; Function binary_search_recursive
; Parameter arr at (R7+8)
; Parameter left at (R7+12)
; Parameter right at (R7+16)
; Parameter key at (R7+20)
; Local variable mid at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
; If statement
LOAD R0, (R7+12) ; load variable left
PUSH R0 ; save left operand
LOAD R0, (R7+16) ; load variable right
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE1 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
PUSH R0 ; save left operand
MOVE 2, R0 ; load constant 2
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Division not implemented (TODO)
STORE R0, (R7-4) ; assign to mid
; If statement
; Complex postfix expression (TODO)
LOAD R0, (R7+8) ; load variable arr
PUSH R0 ; save left operand
LOAD R0, (R7+20) ; load variable key
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_EQ L_SC_TRUE2 ; comparison OP_EQ
MOVE 0, R0 ; comparison result false
JP L_SC_END2
L_SC_TRUE2
MOVE 1, R0 ; comparison result true
L_SC_END2
CMP R0, 0
JP_EQ L_END2 ; if condition is false
; Compound statement
LOAD R0, (R7-4) ; load variable mid
MOVE R0, R6 ; return value
RET ; return from function
L_END2 ; end if
; If statement
; Complex postfix expression (TODO)
LOAD R0, (R7+8) ; load variable arr
PUSH R0 ; save left operand
LOAD R0, (R7+20) ; load variable key
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE3 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END3
L_SC_TRUE3
MOVE 1, R0 ; comparison result true
L_SC_END3
CMP R0, 0
JP_EQ L_END3 ; if condition is false
; Compound statement
; Function call: binary_search_recursive
LOAD R0, (R7+20) ; load variable key
PUSH R0 ; push argument 4
LOAD R0, (R7-4) ; load variable mid
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
SUB R0, R1, R0 ; subtraction
PUSH R0 ; push argument 3
LOAD R0, (R7+12) ; load variable left
PUSH R0 ; push argument 2
LOAD R0, (R7+8) ; load variable arr
PUSH R0 ; push argument 1
CALL F_BINARY_SEARCH_RECURSIVE; call binary_search_recursive
ADD R7, 16, R7 ; cleanup 4 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
L_END3 ; end if
; Function call: binary_search_recursive
LOAD R0, (R7+20) ; load variable key
PUSH R0 ; push argument 4
LOAD R0, (R7+16) ; load variable right
PUSH R0 ; push argument 3
LOAD R0, (R7-4) ; load variable mid
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
PUSH R0 ; push argument 2
LOAD R0, (R7+8) ; load variable arr
PUSH R0 ; push argument 1
CALL F_BINARY_SEARCH_RECURSIVE; call binary_search_recursive
ADD R7, 16, R7 ; cleanup 4 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from binary_search_recursive
F_MAIN ; Function main
; Local variable arr at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 1, R0 ; load constant 1
STORE R0, (R7-4) ; assign to arr
MOVE 3, R0 ; load constant 3
STORE R0, (R7-4) ; assign to arr
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to arr
MOVE 7, R0 ; load constant 7
STORE R0, (R7-4) ; assign to arr
MOVE 9, R0 ; load constant 9
STORE R0, (R7-4) ; assign to arr
; Function call: binary_search_recursive
MOVE 5, R0 ; load constant 5
PUSH R0 ; push argument 4
MOVE 4, R0 ; load constant 4
PUSH R0 ; push argument 3
MOVE 0, R0 ; load constant 0
PUSH R0 ; push argument 2
LOAD R0, (R7-4) ; load variable arr
PUSH R0 ; push argument 1
CALL F_BINARY_SEARCH_RECURSIVE; call binary_search_recursive
ADD R7, 16, R7 ; cleanup 4 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int sum_recursive(int arr[], int n) {
if (n <= 0) {
return 0;
}
return arr[n - 1] + sum_recursive(arr, n - 1);
}
int main(void) {
int arr[4];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
return sum_recursive(arr, 4);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN sum_recursive
2 L_ZAGRADA (
3 IDN arr
4 L_UGL_ZAGRADA [
5 D_UGL_ZAGRADA ]
6 ZAREZ ,
7 IDN n
8 D_ZAGRADA )
9 L_VIT_ZAGRADA {
10 KR_IF if
11 OP_LTE <=
12 BROJ 0
13 KR_RETURN return
14 TOCKAZAREZ ;
15 D_VIT_ZAGRADA }
16 MINUS -
17 BROJ 1
18 PLUS +
19 IDN main
20 KR_VOID void
21 BROJ 4
22 OP_PRIDRUZI =
23 BROJ 2
24 BROJ 3
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
L_UGL_ZAGRADA 1 4
D_UGL_ZAGRADA 1 5
ZAREZ 1 6
KR_INT 1 0
IDN 1 7
D_ZAGRADA 1 8
L_VIT_ZAGRADA 1 9
KR_IF 2 10
L_ZAGRADA 2 2
IDN 2 7
OP_LTE 2 11
BROJ 2 12
D_ZAGRADA 2 8
L_VIT_ZAGRADA 2 9
KR_RETURN 3 13
BROJ 3 12
TOCKAZAREZ 3 14
D_VIT_ZAGRADA 4 15
KR_RETURN 5 13
IDN 5 3
L_UGL_ZAGRADA 5 4
IDN 5 7
MINUS 5 16
BROJ 5 17
D_UGL_ZAGRADA 5 5
PLUS 5 18
IDN 5 1
L_ZAGRADA 5 2
IDN 5 3
ZAREZ 5 6
IDN 5 7
MINUS 5 16
BROJ 5 17
D_ZAGRADA 5 8
TOCKAZAREZ 5 14
D_VIT_ZAGRADA 6 15
KR_INT 8 0
IDN 8 19
L_ZAGRADA 8 2
KR_VOID 8 20
D_ZAGRADA 8 8
L_VIT_ZAGRADA 8 9
KR_INT 9 0
IDN 9 3
L_UGL_ZAGRADA 9 4
BROJ 9 21
D_UGL_ZAGRADA 9 5
TOCKAZAREZ 9 14
IDN 10 3
L_UGL_ZAGRADA 10 4
BROJ 10 12
D_UGL_ZAGRADA 10 5
OP_PRIDRUZI 10 22
BROJ 10 17
TOCKAZAREZ 10 14
IDN 11 3
L_UGL_ZAGRADA 11 4
BROJ 11 17
D_UGL_ZAGRADA 11 5
OP_PRIDRUZI 11 22
BROJ 11 23
TOCKAZAREZ 11 14
IDN 12 3
L_UGL_ZAGRADA 12 4
BROJ 12 23
D_UGL_ZAGRADA 12 5
OP_PRIDRUZI 12 22
BROJ 12 24
TOCKAZAREZ 12 14
IDN 13 3
L_UGL_ZAGRADA 13 4
BROJ 13 24
D_UGL_ZAGRADA 13 5
OP_PRIDRUZI 13 22
BROJ 13 21
TOCKAZAREZ 13 14
KR_RETURN 14 13
IDN 14 1
L_ZAGRADA 14 2
IDN 14 3
ZAREZ 14 6
BROJ 14 21
D_ZAGRADA 14 8
TOCKAZAREZ 14 14
D_VIT_ZAGRADA 15 15
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , sum_recursive
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
D_UGL_ZAGRADA , ]
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_LTE , <=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum_recursive
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum_recursive
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , sum_recursive
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
D_UGL_ZAGRADA , ]
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_LTE , <=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum_recursive
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , arr
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum_recursive
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , arr
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
sum_recursive : INT (array(INT), INT) [defined]
Nested Scope 1:
arr : array(INT)
n : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
arr : array(INT)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(array(INT), INT), lvalue=false, id=sum_recursive, elements=0]
<<izravni_deklarator>> [type=INT(array(INT), INT), lvalue=false, id=sum_recursive, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=sum_recursive, elements=0]
IDN (1,sum_recursive) [symbol=sum_recursive]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<izravni_deklarator>> [type=array(INT), lvalue=false, id=arr, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=arr, elements=0]
IDN (1,arr) [symbol=arr]
L_UGL_ZAGRADA (1,[)
D_UGL_ZAGRADA (1,])
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=n, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=n, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=n, elements=0]
IDN (1,n) [symbol=n]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (2,if)
L_ZAGRADA (2,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,n) [symbol=n]
OP_LTE (2,<=)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (2,0) [type=int]
D_ZAGRADA (2,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (2,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (3,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
TOCKAZAREZ (3,;)
D_VIT_ZAGRADA (4,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (5,arr) [symbol=arr]
L_UGL_ZAGRADA (5,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,n) [symbol=n]
MINUS (5,-)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
D_UGL_ZAGRADA (5,])
PLUS (5,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(array(INT), INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(array(INT), INT), lvalue=false, elements=0]
IDN (5,sum_recursive) [symbol=sum_recursive]
L_ZAGRADA (5,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=array(INT), lvalue=false, elements=0]
<<log_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<log_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_xili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<jednakosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<odnosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<aditivni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<cast_izraz>> [type=array(INT), lvalue=false, elements=0]
<<unarni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (5,arr) [symbol=arr]
ZAREZ (5,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,n) [symbol=n]
MINUS (5,-)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
D_ZAGRADA (5,))
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (8,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (8,main) [symbol=main]
L_ZAGRADA (8,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (8,void)
D_ZAGRADA (8,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (8,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (9,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=array(INT), lvalue=false, id=arr, elements=4]
<<izravni_deklarator>> [type=array(INT), lvalue=false, id=arr, elements=4]
<<izravni_deklarator>> [type=INT, lvalue=true, id=arr, elements=0]
IDN (9,arr) [symbol=arr]
L_UGL_ZAGRADA (9,[)
<<log_ili_izraz>> [lvalue=false, elements=0]
<<log_i_izraz>> [lvalue=false, elements=0]
<<bin_ili_izraz>> [lvalue=false, elements=0]
<<bin_xili_izraz>> [lvalue=false, elements=0]
<<bin_i_izraz>> [lvalue=false, elements=0]
<<jednakosni_izraz>> [lvalue=false, elements=0]
<<odnosni_izraz>> [lvalue=false, elements=0]
<<aditivni_izraz>> [lvalue=false, elements=0]
<<multiplikativni_izraz>> [lvalue=false, elements=0]
<<cast_izraz>> [lvalue=false, elements=0]
<<unarni_izraz>> [lvalue=false, elements=0]
<<postfiks_izraz>> [lvalue=false, elements=0]
<<primarni_izraz>> [lvalue=false, elements=0]
BROJ (9,4) [type=int]
D_UGL_ZAGRADA (9,])
TOCKAZAREZ (9,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (10,arr) [symbol=arr]
L_UGL_ZAGRADA (10,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (10,0) [type=int]
D_UGL_ZAGRADA (10,])
OP_PRIDRUZI (10,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (10,1) [type=int]
TOCKAZAREZ (10,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (11,arr) [symbol=arr]
L_UGL_ZAGRADA (11,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (11,1) [type=int]
D_UGL_ZAGRADA (11,])
OP_PRIDRUZI (11,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (11,2) [type=int]
TOCKAZAREZ (11,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (12,arr) [symbol=arr]
L_UGL_ZAGRADA (12,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (12,2) [type=int]
D_UGL_ZAGRADA (12,])
OP_PRIDRUZI (12,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (12,3) [type=int]
TOCKAZAREZ (12,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (13,arr) [symbol=arr]
L_UGL_ZAGRADA (13,[)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (13,3) [type=int]
D_UGL_ZAGRADA (13,])
OP_PRIDRUZI (13,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (13,4) [type=int]
TOCKAZAREZ (13,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (14,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(array(INT), INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(array(INT), INT), lvalue=false, elements=0]
IDN (14,sum_recursive) [symbol=sum_recursive]
L_ZAGRADA (14,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=array(INT), lvalue=false, elements=0]
<<log_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<log_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_ili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_xili_izraz>> [type=array(INT), lvalue=false, elements=0]
<<bin_i_izraz>> [type=array(INT), lvalue=false, elements=0]
<<jednakosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<odnosni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<aditivni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<cast_izraz>> [type=array(INT), lvalue=false, elements=0]
<<unarni_izraz>> [type=array(INT), lvalue=false, elements=0]
<<postfiks_izraz>> [type=array(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=array(INT), lvalue=false, elements=0]
IDN (14,arr) [symbol=arr]
ZAREZ (14,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (14,4) [type=int]
D_ZAGRADA (14,))
TOCKAZAREZ (14,;)
D_VIT_ZAGRADA (15,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_SUM_RECURSIVE ; Function sum_recursive
; Parameter arr at (R7+8)
; Parameter n at (R7+12)
; Compound statement
; If statement
LOAD R0, (R7+12) ; load variable n
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLE L_SC_TRUE1 ; comparison OP_LTE
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
; Complex postfix expression (TODO)
LOAD R0, (R7+8) ; load variable arr
PUSH R0 ; save left operand
; Function call: sum_recursive
LOAD R0, (R7+12) ; load variable n
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
SUB R0, R1, R0 ; subtraction
PUSH R0 ; push argument 2
LOAD R0, (R7+8) ; load variable arr
PUSH R0 ; push argument 1
CALL F_SUM_RECURSIVE ; call sum_recursive
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from sum_recursive
F_MAIN ; Function main
; Local variable arr at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 1, R0 ; load constant 1
STORE R0, (R7-4) ; assign to arr
MOVE 2, R0 ; load constant 2
STORE R0, (R7-4) ; assign to arr
MOVE 3, R0 ; load constant 3
STORE R0, (R7-4) ; assign to arr
MOVE 4, R0 ; load constant 4
STORE R0, (R7-4) ; assign to arr
; Function call: sum_recursive
MOVE 4, R0 ; load constant 4
PUSH R0 ; push argument 2
LOAD R0, (R7-4) ; load variable arr
PUSH R0 ; push argument 1
CALL F_SUM_RECURSIVE ; call sum_recursive
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
struct Complex {
float real;
float imag;
};
int main(void) {
struct Complex c1;
struct Complex c2;
c1.real = 1.0;
c1.imag = 2.0;
c2.real = 3.0;
c2.imag = 4.0;
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_STRUCT struct
1 IDN Complex
2 L_VIT_ZAGRADA {
3 KR_FLOAT float
4 IDN real
5 TOCKAZAREZ ;
6 IDN imag
7 D_VIT_ZAGRADA }
8 KR_INT int
9 IDN main
10 L_ZAGRADA (
11 KR_VOID void
12 D_ZAGRADA )
13 IDN c1
14 IDN c2
15 TOCKA .
16 OP_PRIDRUZI =
17 BROJ 1.0
18 BROJ 2.0
19 BROJ 3.0
20 BROJ 4.0
21 KR_RETURN return
22 BROJ 0
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_STRUCT 1 0
IDN 1 1
L_VIT_ZAGRADA 1 2
KR_FLOAT 2 3
IDN 2 4
TOCKAZAREZ 2 5
KR_FLOAT 3 3
IDN 3 6
TOCKAZAREZ 3 5
D_VIT_ZAGRADA 4 7
TOCKAZAREZ 4 5
KR_INT 6 8
IDN 6 9
L_ZAGRADA 6 10
KR_VOID 6 11
D_ZAGRADA 6 12
L_VIT_ZAGRADA 6 2
KR_STRUCT 7 0
IDN 7 1
IDN 7 13
TOCKAZAREZ 7 5
KR_STRUCT 8 0
IDN 8 1
IDN 8 14
TOCKAZAREZ 8 5
IDN 9 13
TOCKA 9 15
IDN 9 4
OP_PRIDRUZI 9 16
BROJ 9 17
TOCKAZAREZ 9 5
IDN 10 13
TOCKA 10 15
IDN 10 6
OP_PRIDRUZI 10 16
BROJ 10 18
TOCKAZAREZ 10 5
IDN 11 14
TOCKA 11 15
IDN 11 4
OP_PRIDRUZI 11 16
BROJ 11 19
TOCKAZAREZ 11 5
IDN 12 14
TOCKA 12 15
IDN 12 6
OP_PRIDRUZI 12 16
BROJ 12 20
TOCKAZAREZ 12 5
KR_RETURN 13 21
BROJ 13 22
TOCKAZAREZ 13 5
D_VIT_ZAGRADA 14 7
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
<struct_specifikator>
KR_STRUCT , struct
IDN , Complex
L_VIT_ZAGRADA , {
<struct_lista_deklaracija>
<struct_lista_deklaracija>
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
<specifikator_tipa>
KR_FLOAT , float
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , real
TOCKAZAREZ , ;
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
<specifikator_tipa>
KR_FLOAT , float
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , imag
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
TOCKAZAREZ , ;
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
<struct_specifikator>
KR_STRUCT , struct
IDN , Complex
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , c1
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
<struct_specifikator>
KR_STRUCT , struct
IDN , Complex
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , c2
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c1
TOCKA , .
IDN , real
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1.0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c1
TOCKA , .
IDN , imag
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2.0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c2
TOCKA , .
IDN , real
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3.0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c2
TOCKA , .
IDN , imag
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4.0
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<struct_specifikator>
KR_STRUCT , struct
IDN , Complex
L_VIT_ZAGRADA , {
<struct_lista_deklaracija>
<struct_lista_deklaracija>
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
KR_FLOAT , float
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , real
TOCKAZAREZ , ;
<struct_deklaracija>
<lista_specifikatora_kvalifikatora>
KR_FLOAT , float
<struct_lista_deklaratora>
<struct_deklarator>
<deklarator>
<izravni_deklarator>
IDN , imag
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
TOCKAZAREZ , ;
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<struct_specifikator>
KR_STRUCT , struct
IDN , Complex
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , c1
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<struct_specifikator>
KR_STRUCT , struct
IDN , Complex
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , c2
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c1
TOCKA , .
IDN , real
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1.0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c1
TOCKA , .
IDN , imag
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2.0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c2
TOCKA , .
IDN , real
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3.0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c2
TOCKA , .
IDN , imag
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4.0
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
SEMANTIC ERRORS:
Semantic analysis failed: class hr.fer.ppj.semantics.tree.NonTerminalNode cannot be cast to class hr.fer.ppj.semantics.tree.TerminalNode (hr.fer.ppj.semantics.tree.NonTerminalNode and hr.fer.ppj.semantics.tree.TerminalNode are in unnamed module of loader 'app')
int is_even(int n) {
return n % 2 == 0;
}
int main(void) {
int x;
x = 6;
if (is_even(x)) {
return 1;
}
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN is_even
2 L_ZAGRADA (
3 IDN n
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 KR_RETURN return
7 OP_MOD %
8 BROJ 2
9 OP_EQ ==
10 BROJ 0
11 TOCKAZAREZ ;
12 D_VIT_ZAGRADA }
13 IDN main
14 KR_VOID void
15 IDN x
16 OP_PRIDRUZI =
17 BROJ 6
18 KR_IF if
19 BROJ 1
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_RETURN 2 6
IDN 2 3
OP_MOD 2 7
BROJ 2 8
OP_EQ 2 9
BROJ 2 10
TOCKAZAREZ 2 11
D_VIT_ZAGRADA 3 12
KR_INT 5 0
IDN 5 13
L_ZAGRADA 5 2
KR_VOID 5 14
D_ZAGRADA 5 4
L_VIT_ZAGRADA 5 5
KR_INT 6 0
IDN 6 15
TOCKAZAREZ 6 11
IDN 7 15
OP_PRIDRUZI 7 16
BROJ 7 17
TOCKAZAREZ 7 11
KR_IF 8 18
L_ZAGRADA 8 2
IDN 8 1
L_ZAGRADA 8 2
IDN 8 15
D_ZAGRADA 8 4
D_ZAGRADA 8 4
L_VIT_ZAGRADA 8 5
KR_RETURN 9 6
BROJ 9 19
TOCKAZAREZ 9 11
D_VIT_ZAGRADA 10 12
KR_RETURN 11 6
BROJ 11 10
TOCKAZAREZ 11 11
D_VIT_ZAGRADA 12 12
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , is_even
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 6
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , is_even
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
D_ZAGRADA , )
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , is_even
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 6
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , is_even
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
D_ZAGRADA , )
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
is_even : INT (INT) [defined]
main : INT () [defined]
Nested Scope 1:
n : INT
Nested Scope 2:
x : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT), lvalue=false, id=is_even, elements=0]
<<izravni_deklarator>> [type=INT(INT), lvalue=false, id=is_even, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=is_even, elements=0]
IDN (1,is_even) [symbol=is_even]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=n, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=n, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=n, elements=0]
IDN (1,n) [symbol=n]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (2,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,n) [symbol=n]
OP_MOD (2,%)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (2,2) [type=int]
OP_EQ (2,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (2,0) [type=int]
TOCKAZAREZ (2,;)
D_VIT_ZAGRADA (3,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (5,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (5,main) [symbol=main]
L_ZAGRADA (5,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (5,void)
D_ZAGRADA (5,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (5,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (6,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (6,x) [symbol=x]
TOCKAZAREZ (6,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,x) [symbol=x]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,6) [type=int]
TOCKAZAREZ (7,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (8,if)
L_ZAGRADA (8,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT), lvalue=false, elements=0]
IDN (8,is_even) [symbol=is_even]
L_ZAGRADA (8,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,x) [symbol=x]
D_ZAGRADA (8,))
D_ZAGRADA (8,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (8,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (9,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,1) [type=int]
TOCKAZAREZ (9,;)
D_VIT_ZAGRADA (10,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (11,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (11,0) [type=int]
TOCKAZAREZ (11,;)
D_VIT_ZAGRADA (12,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_IS_EVEN ; Function is_even
; Parameter n at (R7+8)
; Compound statement
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
MOVE 2, R0 ; load constant 2
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Modulo not implemented (TODO)
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_EQ L_SC_TRUE1 ; comparison OP_EQ
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from is_even
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 6, R0 ; load constant 6
STORE R0, (R7-4) ; assign to x
; If statement
; Function call: is_even
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; push argument 1
CALL F_IS_EVEN ; call is_even
ADD R7, 4, R7 ; cleanup 1 arguments
MOVE R6, R0 ; function result
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int count_digits(int n) {
int count;
count = 0;
while (n != 0) {
count = count + 1;
n = n / 10;
}
return count;
}
int main(void) {
return count_digits(12345);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN count_digits
2 L_ZAGRADA (
3 IDN n
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN count
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 0
10 KR_WHILE while
11 OP_NEQ !=
12 PLUS +
13 BROJ 1
14 OP_DIJELI /
15 BROJ 10
16 D_VIT_ZAGRADA }
17 KR_RETURN return
18 IDN main
19 KR_VOID void
20 BROJ 12345
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_WHILE 4 10
L_ZAGRADA 4 2
IDN 4 3
OP_NEQ 4 11
BROJ 4 9
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
IDN 5 6
OP_PRIDRUZI 5 8
IDN 5 6
PLUS 5 12
BROJ 5 13
TOCKAZAREZ 5 7
IDN 6 3
OP_PRIDRUZI 6 8
IDN 6 3
OP_DIJELI 6 14
BROJ 6 15
TOCKAZAREZ 6 7
D_VIT_ZAGRADA 7 16
KR_RETURN 8 17
IDN 8 6
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 16
KR_INT 11 0
IDN 11 18
L_ZAGRADA 11 2
KR_VOID 11 19
D_ZAGRADA 11 4
L_VIT_ZAGRADA 11 5
KR_RETURN 12 17
IDN 12 1
L_ZAGRADA 12 2
BROJ 12 20
D_ZAGRADA 12 4
TOCKAZAREZ 12 7
D_VIT_ZAGRADA 13 16
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , count_digits
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , count
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_NEQ , !=
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_DIJELI , /
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count_digits
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 12345
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , count_digits
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , count
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_NEQ , !=
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_DIJELI , /
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count_digits
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 12345
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
count_digits : INT (INT) [defined]
main : INT () [defined]
Nested Scope 1:
count : INT
n : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT), lvalue=false, id=count_digits, elements=0]
<<izravni_deklarator>> [type=INT(INT), lvalue=false, id=count_digits, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=count_digits, elements=0]
IDN (1,count_digits) [symbol=count_digits]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=n, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=n, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=n, elements=0]
IDN (1,n) [symbol=n]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=count, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=count, elements=0]
IDN (2,count) [symbol=count]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,count) [symbol=count]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_WHILE (4,while)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,n) [symbol=n]
OP_NEQ (4,!=)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,count) [symbol=count]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,count) [symbol=count]
PLUS (5,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,n) [symbol=n]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,n) [symbol=n]
OP_DIJELI (6,/)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,10) [type=int]
TOCKAZAREZ (6,;)
D_VIT_ZAGRADA (7,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,count) [symbol=count]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (11,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (11,main) [symbol=main]
L_ZAGRADA (11,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (11,void)
D_ZAGRADA (11,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (11,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (12,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT), lvalue=false, elements=0]
IDN (12,count_digits) [symbol=count_digits]
L_ZAGRADA (12,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (12,12345) [type=int]
D_ZAGRADA (12,))
TOCKAZAREZ (12,;)
D_VIT_ZAGRADA (13,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_COUNT_DIGITS ; Function count_digits
; Parameter n at (R7+8)
; Local variable count at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-4) ; assign to count
; While loop
L_LOOP1 ; while loop start
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_NE L_SC_TRUE1 ; comparison OP_NEQ
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_BREAK1 ; exit while loop
; Compound statement
LOAD R0, (R7-4) ; load variable count
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
STORE R0, (R7-4) ; assign to count
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
MOVE 10, R0 ; load constant 10
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Division not implemented (TODO)
STORE R0, (R7+8) ; assign to n
L_CONTINUE1 ; while continue
JP L_LOOP1 ; repeat while loop
L_BREAK1 ; while loop end
LOAD R0, (R7-4) ; load variable count
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from count_digits
F_MAIN ; Function main
; Compound statement
; Function call: count_digits
MOVE 12345, R0 ; load constant 12345
PUSH R0 ; push argument 1
CALL F_COUNT_DIGITS ; call count_digits
ADD R7, 4, R7 ; cleanup 1 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int reverse_number(int n) {
int reversed;
reversed = 0;
while (n != 0) {
reversed = reversed * 10 + n % 10;
n = n / 10;
}
return reversed;
}
int main(void) {
return reverse_number(123);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN reverse_number
2 L_ZAGRADA (
3 IDN n
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN reversed
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 0
10 KR_WHILE while
11 OP_NEQ !=
12 ASTERISK *
13 BROJ 10
14 PLUS +
15 OP_MOD %
16 OP_DIJELI /
17 D_VIT_ZAGRADA }
18 KR_RETURN return
19 IDN main
20 KR_VOID void
21 BROJ 123
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_WHILE 4 10
L_ZAGRADA 4 2
IDN 4 3
OP_NEQ 4 11
BROJ 4 9
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
IDN 5 6
OP_PRIDRUZI 5 8
IDN 5 6
ASTERISK 5 12
BROJ 5 13
PLUS 5 14
IDN 5 3
OP_MOD 5 15
BROJ 5 13
TOCKAZAREZ 5 7
IDN 6 3
OP_PRIDRUZI 6 8
IDN 6 3
OP_DIJELI 6 16
BROJ 6 13
TOCKAZAREZ 6 7
D_VIT_ZAGRADA 7 17
KR_RETURN 8 18
IDN 8 6
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 17
KR_INT 11 0
IDN 11 19
L_ZAGRADA 11 2
KR_VOID 11 20
D_ZAGRADA 11 4
L_VIT_ZAGRADA 11 5
KR_RETURN 12 18
IDN 12 1
L_ZAGRADA 12 2
BROJ 12 21
D_ZAGRADA 12 4
TOCKAZAREZ 12 7
D_VIT_ZAGRADA 13 17
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , reverse_number
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , reversed
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , reversed
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_NEQ , !=
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , reversed
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , reversed
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
PLUS , +
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_DIJELI , /
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , reversed
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , reverse_number
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 123
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , reverse_number
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , reversed
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , reversed
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_NEQ , !=
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , reversed
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , reversed
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
PLUS , +
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_DIJELI , /
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , reversed
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , reverse_number
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 123
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
reverse_number : INT (INT) [defined]
Nested Scope 1:
n : INT
reversed : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT), lvalue=false, id=reverse_number, elements=0]
<<izravni_deklarator>> [type=INT(INT), lvalue=false, id=reverse_number, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=reverse_number, elements=0]
IDN (1,reverse_number) [symbol=reverse_number]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=n, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=n, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=n, elements=0]
IDN (1,n) [symbol=n]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=reversed, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=reversed, elements=0]
IDN (2,reversed) [symbol=reversed]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,reversed) [symbol=reversed]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_WHILE (4,while)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,n) [symbol=n]
OP_NEQ (4,!=)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,reversed) [symbol=reversed]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,reversed) [symbol=reversed]
ASTERISK (5,*)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,10) [type=int]
PLUS (5,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,n) [symbol=n]
OP_MOD (5,%)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,10) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,n) [symbol=n]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,n) [symbol=n]
OP_DIJELI (6,/)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,10) [type=int]
TOCKAZAREZ (6,;)
D_VIT_ZAGRADA (7,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,reversed) [symbol=reversed]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (11,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (11,main) [symbol=main]
L_ZAGRADA (11,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (11,void)
D_ZAGRADA (11,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (11,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (12,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT), lvalue=false, elements=0]
IDN (12,reverse_number) [symbol=reverse_number]
L_ZAGRADA (12,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (12,123) [type=int]
D_ZAGRADA (12,))
TOCKAZAREZ (12,;)
D_VIT_ZAGRADA (13,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_REVERSE_NUMBER ; Function reverse_number
; Parameter n at (R7+8)
; Local variable reversed at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-4) ; assign to reversed
; While loop
L_LOOP1 ; while loop start
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_NE L_SC_TRUE1 ; comparison OP_NEQ
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_BREAK1 ; exit while loop
; Compound statement
LOAD R0, (R7-4) ; load variable reversed
PUSH R0 ; save left operand
MOVE 10, R0 ; load constant 10
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Multiplication: R0 * R1
CMP R1, 0
JP_EQ L_BREAK2 ; if multiplier is 0
MOVE R0, R2 ; save multiplicand
MOVE R1, R3 ; save multiplier
MOVE 0, R0 ; initialize result
L_LOOP2 ; multiplication loop
ADD R0, R2, R0 ; add multiplicand to result
SUB R3, 1, R3 ; decrement multiplier
CMP R3, 0
JP_GT L_LOOP2 ; repeat if multiplier > 0
L_BREAK2 ; multiplication done
PUSH R0 ; save left operand
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
MOVE 10, R0 ; load constant 10
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Modulo not implemented (TODO)
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
STORE R0, (R7-4) ; assign to reversed
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
MOVE 10, R0 ; load constant 10
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Division not implemented (TODO)
STORE R0, (R7+8) ; assign to n
L_CONTINUE1 ; while continue
JP L_LOOP1 ; repeat while loop
L_BREAK1 ; while loop end
LOAD R0, (R7-4) ; load variable reversed
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from reverse_number
F_MAIN ; Function main
; Compound statement
; Function call: reverse_number
MOVE 123, R0 ; load constant 123
PUSH R0 ; push argument 1
CALL F_REVERSE_NUMBER ; call reverse_number
ADD R7, 4, R7 ; cleanup 1 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int is_prime(int n) {
int i;
if (n <= 1) {
return 0;
}
for (i = 2; i < n; i = i + 1) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main(void) {
return is_prime(17);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN is_prime
2 L_ZAGRADA (
3 IDN n
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 KR_IF if
9 OP_LTE <=
10 BROJ 1
11 KR_RETURN return
12 BROJ 0
13 D_VIT_ZAGRADA }
14 KR_FOR for
15 OP_PRIDRUZI =
16 BROJ 2
17 OP_LT <
18 PLUS +
19 OP_MOD %
20 OP_EQ ==
21 IDN main
22 KR_VOID void
23 BROJ 17
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_IF 3 8
L_ZAGRADA 3 2
IDN 3 3
OP_LTE 3 9
BROJ 3 10
D_ZAGRADA 3 4
L_VIT_ZAGRADA 3 5
KR_RETURN 4 11
BROJ 4 12
TOCKAZAREZ 4 7
D_VIT_ZAGRADA 5 13
KR_FOR 6 14
L_ZAGRADA 6 2
IDN 6 6
OP_PRIDRUZI 6 15
BROJ 6 16
TOCKAZAREZ 6 7
IDN 6 6
OP_LT 6 17
IDN 6 3
TOCKAZAREZ 6 7
IDN 6 6
OP_PRIDRUZI 6 15
IDN 6 6
PLUS 6 18
BROJ 6 10
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
KR_IF 7 8
L_ZAGRADA 7 2
IDN 7 3
OP_MOD 7 19
IDN 7 6
OP_EQ 7 20
BROJ 7 12
D_ZAGRADA 7 4
L_VIT_ZAGRADA 7 5
KR_RETURN 8 11
BROJ 8 12
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 13
D_VIT_ZAGRADA 10 13
KR_RETURN 11 11
BROJ 11 10
TOCKAZAREZ 11 7
D_VIT_ZAGRADA 12 13
KR_INT 14 0
IDN 14 21
L_ZAGRADA 14 2
KR_VOID 14 22
D_ZAGRADA 14 4
L_VIT_ZAGRADA 14 5
KR_RETURN 15 11
IDN 15 1
L_ZAGRADA 15 2
BROJ 15 23
D_ZAGRADA 15 4
TOCKAZAREZ 15 7
D_VIT_ZAGRADA 16 13
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , is_prime
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_LTE , <=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , is_prime
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 17
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , is_prime
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , n
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_LTE , <=
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , n
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , is_prime
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 17
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
is_prime : INT (INT) [defined]
main : INT () [defined]
Nested Scope 1:
i : INT
n : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT), lvalue=false, id=is_prime, elements=0]
<<izravni_deklarator>> [type=INT(INT), lvalue=false, id=is_prime, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=is_prime, elements=0]
IDN (1,is_prime) [symbol=is_prime]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=n, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=n, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=n, elements=0]
IDN (1,n) [symbol=n]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (3,if)
L_ZAGRADA (3,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,n) [symbol=n]
OP_LTE (3,<=)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,1) [type=int]
D_ZAGRADA (3,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (3,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (4,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
TOCKAZAREZ (4,;)
D_VIT_ZAGRADA (5,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (6,for)
L_ZAGRADA (6,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,2) [type=int]
TOCKAZAREZ (6,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
OP_LT (6,<)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,n) [symbol=n]
TOCKAZAREZ (6,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
PLUS (6,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,1) [type=int]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (7,if)
L_ZAGRADA (7,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,n) [symbol=n]
OP_MOD (7,%)
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,i) [symbol=i]
OP_EQ (7,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,0) [type=int]
D_ZAGRADA (7,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (7,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (8,0) [type=int]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
D_VIT_ZAGRADA (10,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (11,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (11,1) [type=int]
TOCKAZAREZ (11,;)
D_VIT_ZAGRADA (12,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (14,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (14,main) [symbol=main]
L_ZAGRADA (14,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (14,void)
D_ZAGRADA (14,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (14,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (15,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT), lvalue=false, elements=0]
IDN (15,is_prime) [symbol=is_prime]
L_ZAGRADA (15,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (15,17) [type=int]
D_ZAGRADA (15,))
TOCKAZAREZ (15,;)
D_VIT_ZAGRADA (16,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_IS_PRIME ; Function is_prime
; Parameter n at (R7+8)
; Local variable i at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
; If statement
LOAD R0, (R7+8) ; load variable n
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLE L_SC_TRUE1 ; comparison OP_LTE
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
; For loop with increment (TODO)
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from is_prime
F_MAIN ; Function main
; Compound statement
; Function call: is_prime
MOVE 17, R0 ; load constant 17
PUSH R0 ; push argument 1
CALL F_IS_PRIME ; call is_prime
ADD R7, 4, R7 ; cleanup 1 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
int y;
int z;
x = 5;
y = 10;
z = x + y * 2;
return z;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 IDN y
9 IDN z
10 OP_PRIDRUZI =
11 BROJ 5
12 BROJ 10
13 PLUS +
14 ASTERISK *
15 BROJ 2
16 KR_RETURN return
17 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
KR_INT 4 0
IDN 4 9
TOCKAZAREZ 4 7
IDN 5 6
OP_PRIDRUZI 5 10
BROJ 5 11
TOCKAZAREZ 5 7
IDN 6 8
OP_PRIDRUZI 6 10
BROJ 6 12
TOCKAZAREZ 6 7
IDN 7 9
OP_PRIDRUZI 7 10
IDN 7 6
PLUS 7 13
IDN 7 8
ASTERISK 7 14
BROJ 7 15
TOCKAZAREZ 7 7
KR_RETURN 8 16
IDN 8 9
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 17
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , z
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , z
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
PLUS , +
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , z
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , z
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , z
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
PLUS , +
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , z
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
y : INT
z : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (3,y) [symbol=y]
TOCKAZAREZ (3,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (4,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=z, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=z, elements=0]
IDN (4,z) [symbol=z]
TOCKAZAREZ (4,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,5) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,10) [type=int]
TOCKAZAREZ (6,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,z) [symbol=z]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,x) [symbol=x]
PLUS (7,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,y) [symbol=y]
ASTERISK (7,*)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,2) [type=int]
TOCKAZAREZ (7,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,z) [symbol=z]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
; Local variable z at (R7-12)
SUB R7, 12, R7 ; allocate 3 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
MOVE 10, R0 ; load constant 10
STORE R0, (R7-8) ; assign to y
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
LOAD R0, (R7-8) ; load variable y
PUSH R0 ; save left operand
MOVE 2, R0 ; load constant 2
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Multiplication: R0 * R1
CMP R1, 0
JP_EQ L_BREAK1 ; if multiplier is 0
MOVE R0, R2 ; save multiplicand
MOVE R1, R3 ; save multiplier
MOVE 0, R0 ; initialize result
L_LOOP1 ; multiplication loop
ADD R0, R2, R0 ; add multiplicand to result
SUB R3, 1, R3 ; decrement multiplier
CMP R3, 0
JP_GT L_LOOP1 ; repeat if multiplier > 0
L_BREAK1 ; multiplication done
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
STORE R0, (R7-12) ; assign to z
LOAD R0, (R7-12) ; load variable z
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 12, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int a;
int b;
int result;
a = 17;
b = 5;
result = a % b;
return result;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN a
7 TOCKAZAREZ ;
8 IDN b
9 IDN result
10 OP_PRIDRUZI =
11 BROJ 17
12 BROJ 5
13 OP_MOD %
14 KR_RETURN return
15 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
KR_INT 4 0
IDN 4 9
TOCKAZAREZ 4 7
IDN 5 6
OP_PRIDRUZI 5 10
BROJ 5 11
TOCKAZAREZ 5 7
IDN 6 8
OP_PRIDRUZI 6 10
BROJ 6 12
TOCKAZAREZ 6 7
IDN 7 9
OP_PRIDRUZI 7 10
IDN 7 6
OP_MOD 7 13
IDN 7 8
TOCKAZAREZ 7 7
KR_RETURN 8 14
IDN 8 9
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 15
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , a
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , b
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 17
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , a
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , b
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 17
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
a : INT
b : INT
result : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=a, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=a, elements=0]
IDN (2,a) [symbol=a]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=b, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=b, elements=0]
IDN (3,b) [symbol=b]
TOCKAZAREZ (3,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (4,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=result, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=result, elements=0]
IDN (4,result) [symbol=result]
TOCKAZAREZ (4,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,a) [symbol=a]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,17) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,b) [symbol=b]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,5) [type=int]
TOCKAZAREZ (6,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,result) [symbol=result]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,a) [symbol=a]
OP_MOD (7,%)
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,b) [symbol=b]
TOCKAZAREZ (7,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,result) [symbol=result]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable a at (R7-4)
; Local variable b at (R7-8)
; Local variable result at (R7-12)
SUB R7, 12, R7 ; allocate 3 local variables
; Compound statement
; Local declarations (TODO)
MOVE 17, R0 ; load constant 17
STORE R0, (R7-4) ; assign to a
MOVE 5, R0 ; load constant 5
STORE R0, (R7-8) ; assign to b
LOAD R0, (R7-4) ; load variable a
PUSH R0 ; save left operand
LOAD R0, (R7-8) ; load variable b
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Modulo not implemented (TODO)
STORE R0, (R7-12) ; assign to result
LOAD R0, (R7-12) ; load variable result
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 12, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
int y;
int z;
x = 5;
y = 10;
z = (x + y) * 2;
return z;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 IDN y
9 IDN z
10 OP_PRIDRUZI =
11 BROJ 5
12 BROJ 10
13 PLUS +
14 ASTERISK *
15 BROJ 2
16 KR_RETURN return
17 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
KR_INT 4 0
IDN 4 9
TOCKAZAREZ 4 7
IDN 5 6
OP_PRIDRUZI 5 10
BROJ 5 11
TOCKAZAREZ 5 7
IDN 6 8
OP_PRIDRUZI 6 10
BROJ 6 12
TOCKAZAREZ 6 7
IDN 7 9
OP_PRIDRUZI 7 10
L_ZAGRADA 7 2
IDN 7 6
PLUS 7 13
IDN 7 8
D_ZAGRADA 7 4
ASTERISK 7 14
BROJ 7 15
TOCKAZAREZ 7 7
KR_RETURN 8 16
IDN 8 9
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 17
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , z
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , z
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
D_ZAGRADA , )
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , z
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , z
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , z
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
D_ZAGRADA , )
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , z
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
y : INT
z : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (3,y) [symbol=y]
TOCKAZAREZ (3,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (4,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=z, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=z, elements=0]
IDN (4,z) [symbol=z]
TOCKAZAREZ (4,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,5) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,10) [type=int]
TOCKAZAREZ (6,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,z) [symbol=z]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
L_ZAGRADA (7,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,x) [symbol=x]
PLUS (7,+)
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,y) [symbol=y]
D_ZAGRADA (7,))
ASTERISK (7,*)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,2) [type=int]
TOCKAZAREZ (7,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,z) [symbol=z]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
; Local variable z at (R7-12)
SUB R7, 12, R7 ; allocate 3 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
MOVE 10, R0 ; load constant 10
STORE R0, (R7-8) ; assign to y
PUSH R0 ; save left operand
MOVE 2, R0 ; load constant 2
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Multiplication: R0 * R1
CMP R1, 0
JP_EQ L_BREAK1 ; if multiplier is 0
MOVE R0, R2 ; save multiplicand
MOVE R1, R3 ; save multiplier
MOVE 0, R0 ; initialize result
L_LOOP1 ; multiplication loop
ADD R0, R2, R0 ; add multiplicand to result
SUB R3, 1, R3 ; decrement multiplier
CMP R3, 0
JP_GT L_LOOP1 ; repeat if multiplier > 0
L_BREAK1 ; multiplication done
STORE R0, (R7-12) ; assign to z
LOAD R0, (R7-12) ; load variable z
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 12, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
int y;
int z;
x = 5;
y = 10;
z = x > y && x < 20;
return z;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 IDN y
9 IDN z
10 OP_PRIDRUZI =
11 BROJ 5
12 BROJ 10
13 OP_GT >
14 OP_I &&
15 OP_LT <
16 BROJ 20
17 KR_RETURN return
18 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
KR_INT 4 0
IDN 4 9
TOCKAZAREZ 4 7
IDN 5 6
OP_PRIDRUZI 5 10
BROJ 5 11
TOCKAZAREZ 5 7
IDN 6 8
OP_PRIDRUZI 6 10
BROJ 6 12
TOCKAZAREZ 6 7
IDN 7 9
OP_PRIDRUZI 7 10
IDN 7 6
OP_GT 7 13
IDN 7 8
OP_I 7 14
IDN 7 6
OP_LT 7 15
BROJ 7 16
TOCKAZAREZ 7 7
KR_RETURN 8 17
IDN 8 9
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 18
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , z
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , z
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_I , &&
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , z
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , z
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , z
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_I , &&
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , z
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
y : INT
z : INT
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (3,y) [symbol=y]
TOCKAZAREZ (3,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (4,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=z, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=z, elements=0]
IDN (4,z) [symbol=z]
TOCKAZAREZ (4,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,x) [symbol=x]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,5) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,10) [type=int]
TOCKAZAREZ (6,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,z) [symbol=z]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,x) [symbol=x]
OP_GT (7,>)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,y) [symbol=y]
OP_I (7,&&)
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,x) [symbol=x]
OP_LT (7,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,20) [type=int]
TOCKAZAREZ (7,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (8,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,z) [symbol=z]
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
; Local variable z at (R7-12)
SUB R7, 12, R7 ; allocate 3 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
MOVE 10, R0 ; load constant 10
STORE R0, (R7-8) ; assign to y
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
LOAD R0, (R7-8) ; load variable y
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE2 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END2
L_SC_TRUE2
MOVE 1, R0 ; comparison result true
L_SC_END2
CMP R0, 0
JP_EQ L_SC_FALSE1 ; short-circuit: left is false
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 20, R0 ; load constant 20
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLT L_SC_TRUE3 ; comparison OP_LT
MOVE 0, R0 ; comparison result false
JP L_SC_END3
L_SC_TRUE3
MOVE 1, R0 ; comparison result true
L_SC_END3
CMP R0, 0
JP_EQ L_SC_FALSE1 ; right is false
MOVE 1, R0 ; result is true
JP L_SC_END1
L_SC_FALSE1
MOVE 0, R0 ; result is false
L_SC_END1
STORE R0, (R7-12) ; assign to z
LOAD R0, (R7-12) ; load variable z
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 12, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
int y;
x = 5;
y = 10;
if (x > 0 && y > 0 && x < y) {
return 1;
}
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 IDN y
9 OP_PRIDRUZI =
10 BROJ 5
11 BROJ 10
12 KR_IF if
13 OP_GT >
14 BROJ 0
15 OP_I &&
16 OP_LT <
17 KR_RETURN return
18 BROJ 1
19 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 9
BROJ 4 10
TOCKAZAREZ 4 7
IDN 5 8
OP_PRIDRUZI 5 9
BROJ 5 11
TOCKAZAREZ 5 7
KR_IF 6 12
L_ZAGRADA 6 2
IDN 6 6
OP_GT 6 13
BROJ 6 14
OP_I 6 15
IDN 6 8
OP_GT 6 13
BROJ 6 14
OP_I 6 15
IDN 6 6
OP_LT 6 16
IDN 6 8
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
KR_RETURN 7 17
BROJ 7 18
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 19
KR_RETURN 9 17
BROJ 9 14
TOCKAZAREZ 9 7
D_VIT_ZAGRADA 10 19
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<log_i_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
OP_I , &&
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
OP_I , &&
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<log_i_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
OP_I , &&
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
OP_I , &&
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
y : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (3,y) [symbol=y]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,5) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,y) [symbol=y]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,10) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (6,if)
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,x) [symbol=x]
OP_GT (6,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
OP_I (6,&&)
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
OP_GT (6,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
OP_I (6,&&)
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,x) [symbol=x]
OP_LT (6,<)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,1) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (9,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,0) [type=int]
TOCKAZAREZ (9,;)
D_VIT_ZAGRADA (10,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
MOVE 10, R0 ; load constant 10
STORE R0, (R7-8) ; assign to y
; If statement
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE3 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END3
L_SC_TRUE3
MOVE 1, R0 ; comparison result true
L_SC_END3
CMP R0, 0
JP_EQ L_SC_FALSE2 ; short-circuit: left is false
LOAD R0, (R7-8) ; load variable y
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE4 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END4
L_SC_TRUE4
MOVE 1, R0 ; comparison result true
L_SC_END4
CMP R0, 0
JP_EQ L_SC_FALSE2 ; right is false
MOVE 1, R0 ; result is true
JP L_SC_END2
L_SC_FALSE2
MOVE 0, R0 ; result is false
L_SC_END2
CMP R0, 0
JP_EQ L_SC_FALSE1 ; short-circuit: left is false
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
LOAD R0, (R7-8) ; load variable y
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLT L_SC_TRUE5 ; comparison OP_LT
MOVE 0, R0 ; comparison result false
JP L_SC_END5
L_SC_TRUE5
MOVE 1, R0 ; comparison result true
L_SC_END5
CMP R0, 0
JP_EQ L_SC_FALSE1 ; right is false
MOVE 1, R0 ; result is true
JP L_SC_END1
L_SC_FALSE1
MOVE 0, R0 ; result is false
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
int y;
x = 0;
y = 10;
if (x > 0 || y > 0 || x == y) {
return 1;
}
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 IDN y
9 OP_PRIDRUZI =
10 BROJ 0
11 BROJ 10
12 KR_IF if
13 OP_GT >
14 OP_ILI ||
15 OP_EQ ==
16 KR_RETURN return
17 BROJ 1
18 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 9
BROJ 4 10
TOCKAZAREZ 4 7
IDN 5 8
OP_PRIDRUZI 5 9
BROJ 5 11
TOCKAZAREZ 5 7
KR_IF 6 12
L_ZAGRADA 6 2
IDN 6 6
OP_GT 6 13
BROJ 6 10
OP_ILI 6 14
IDN 6 8
OP_GT 6 13
BROJ 6 10
OP_ILI 6 14
IDN 6 6
OP_EQ 6 15
IDN 6 8
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
KR_RETURN 7 16
BROJ 7 17
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 18
KR_RETURN 9 16
BROJ 9 10
TOCKAZAREZ 9 7
D_VIT_ZAGRADA 10 18
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_ili_izraz>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
OP_ILI , ||
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
OP_ILI , ||
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , y
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_ili_izraz>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
OP_ILI , ||
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
OP_ILI , ||
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
y : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (3,y) [symbol=y]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,y) [symbol=y]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,10) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (6,if)
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,x) [symbol=x]
OP_GT (6,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
OP_ILI (6,||)
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
OP_GT (6,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
OP_ILI (6,||)
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,x) [symbol=x]
OP_EQ (6,==)
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,y) [symbol=y]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,1) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (9,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,0) [type=int]
TOCKAZAREZ (9,;)
D_VIT_ZAGRADA (10,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
; Local variable y at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-4) ; assign to x
MOVE 10, R0 ; load constant 10
STORE R0, (R7-8) ; assign to y
; If statement
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE3 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END3
L_SC_TRUE3
MOVE 1, R0 ; comparison result true
L_SC_END3
CMP R0, 0
JP_NE L_SC_TRUE2 ; short-circuit: left is true
LOAD R0, (R7-8) ; load variable y
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE4 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END4
L_SC_TRUE4
MOVE 1, R0 ; comparison result true
L_SC_END4
CMP R0, 0
JP_NE L_SC_TRUE2 ; right is true
MOVE 0, R0 ; result is false
JP L_SC_END2
L_SC_TRUE2
MOVE 1, R0 ; result is true
L_SC_END2
CMP R0, 0
JP_NE L_SC_TRUE1 ; short-circuit: left is true
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
LOAD R0, (R7-8) ; load variable y
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_EQ L_SC_TRUE5 ; comparison OP_EQ
MOVE 0, R0 ; comparison result false
JP L_SC_END5
L_SC_TRUE5
MOVE 1, R0 ; comparison result true
L_SC_END5
CMP R0, 0
JP_NE L_SC_TRUE1 ; right is true
MOVE 0, R0 ; result is false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; result is true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int nested_if(int x, int y) {
if (x > 0) {
if (y > 0) {
if (x < y) {
return 1;
}
}
}
return 0;
}
int main(void) {
return nested_if(5, 10);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN nested_if
2 L_ZAGRADA (
3 IDN x
4 ZAREZ ,
5 IDN y
6 D_ZAGRADA )
7 L_VIT_ZAGRADA {
8 KR_IF if
9 OP_GT >
10 BROJ 0
11 OP_LT <
12 KR_RETURN return
13 BROJ 1
14 TOCKAZAREZ ;
15 D_VIT_ZAGRADA }
16 IDN main
17 KR_VOID void
18 BROJ 5
19 BROJ 10
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
ZAREZ 1 4
KR_INT 1 0
IDN 1 5
D_ZAGRADA 1 6
L_VIT_ZAGRADA 1 7
KR_IF 2 8
L_ZAGRADA 2 2
IDN 2 3
OP_GT 2 9
BROJ 2 10
D_ZAGRADA 2 6
L_VIT_ZAGRADA 2 7
KR_IF 3 8
L_ZAGRADA 3 2
IDN 3 5
OP_GT 3 9
BROJ 3 10
D_ZAGRADA 3 6
L_VIT_ZAGRADA 3 7
KR_IF 4 8
L_ZAGRADA 4 2
IDN 4 3
OP_LT 4 11
IDN 4 5
D_ZAGRADA 4 6
L_VIT_ZAGRADA 4 7
KR_RETURN 5 12
BROJ 5 13
TOCKAZAREZ 5 14
D_VIT_ZAGRADA 6 15
D_VIT_ZAGRADA 7 15
D_VIT_ZAGRADA 8 15
KR_RETURN 9 12
BROJ 9 10
TOCKAZAREZ 9 14
D_VIT_ZAGRADA 10 15
KR_INT 12 0
IDN 12 16
L_ZAGRADA 12 2
KR_VOID 12 17
D_ZAGRADA 12 6
L_VIT_ZAGRADA 12 7
KR_RETURN 13 12
IDN 13 1
L_ZAGRADA 13 2
BROJ 13 18
ZAREZ 13 4
BROJ 13 19
D_ZAGRADA 13 6
TOCKAZAREZ 13 14
D_VIT_ZAGRADA 14 15
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , nested_if
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , x
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , y
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , nested_if
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , nested_if
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , x
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , y
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , y
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , nested_if
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
nested_if : INT (INT, INT) [defined]
Nested Scope 1:
x : INT
y : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT, INT), lvalue=false, id=nested_if, elements=0]
<<izravni_deklarator>> [type=INT(INT, INT), lvalue=false, id=nested_if, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=nested_if, elements=0]
IDN (1,nested_if) [symbol=nested_if]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=x, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (1,x) [symbol=x]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=y, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=y, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=y, elements=0]
IDN (1,y) [symbol=y]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (2,if)
L_ZAGRADA (2,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,x) [symbol=x]
OP_GT (2,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (2,0) [type=int]
D_ZAGRADA (2,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (2,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (3,if)
L_ZAGRADA (3,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,y) [symbol=y]
OP_GT (3,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
D_ZAGRADA (3,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (3,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (4,if)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_LT (4,<)
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,y) [symbol=y]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
D_VIT_ZAGRADA (7,})
D_VIT_ZAGRADA (8,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (9,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,0) [type=int]
TOCKAZAREZ (9,;)
D_VIT_ZAGRADA (10,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (12,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (12,main) [symbol=main]
L_ZAGRADA (12,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (12,void)
D_ZAGRADA (12,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (12,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (13,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT, INT), lvalue=false, elements=0]
IDN (13,nested_if) [symbol=nested_if]
L_ZAGRADA (13,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (13,5) [type=int]
ZAREZ (13,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (13,10) [type=int]
D_ZAGRADA (13,))
TOCKAZAREZ (13,;)
D_VIT_ZAGRADA (14,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_NESTED_IF ; Function nested_if
; Parameter x at (R7+8)
; Parameter y at (R7+12)
; Compound statement
; If statement
LOAD R0, (R7+8) ; load variable x
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE1 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
; If statement
LOAD R0, (R7+12) ; load variable y
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE2 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END2
L_SC_TRUE2
MOVE 1, R0 ; comparison result true
L_SC_END2
CMP R0, 0
JP_EQ L_END2 ; if condition is false
; Compound statement
; If statement
LOAD R0, (R7+8) ; load variable x
PUSH R0 ; save left operand
LOAD R0, (R7+12) ; load variable y
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLT L_SC_TRUE3 ; comparison OP_LT
MOVE 0, R0 ; comparison result false
JP L_SC_END3
L_SC_TRUE3
MOVE 1, R0 ; comparison result true
L_SC_END3
CMP R0, 0
JP_EQ L_END3 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END3 ; end if
L_END2 ; end if
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from nested_if
F_MAIN ; Function main
; Compound statement
; Function call: nested_if
MOVE 10, R0 ; load constant 10
PUSH R0 ; push argument 2
MOVE 5, R0 ; load constant 5
PUSH R0 ; push argument 1
CALL F_NESTED_IF ; call nested_if
ADD R7, 8, R7 ; cleanup 2 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
int j;
int k;
int count;
count = 0;
for (i = 0; i < 3; i = i + 1) {
for (j = 0; j < 3; j = j + 1) {
for (k = 0; k < 3; k = k + 1) {
count = count + 1;
}
}
}
return count;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 IDN j
9 IDN k
10 IDN count
11 OP_PRIDRUZI =
12 BROJ 0
13 KR_FOR for
14 OP_LT <
15 BROJ 3
16 PLUS +
17 BROJ 1
18 D_VIT_ZAGRADA }
19 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
KR_INT 4 0
IDN 4 9
TOCKAZAREZ 4 7
KR_INT 5 0
IDN 5 10
TOCKAZAREZ 5 7
IDN 6 10
OP_PRIDRUZI 6 11
BROJ 6 12
TOCKAZAREZ 6 7
KR_FOR 7 13
L_ZAGRADA 7 2
IDN 7 6
OP_PRIDRUZI 7 11
BROJ 7 12
TOCKAZAREZ 7 7
IDN 7 6
OP_LT 7 14
BROJ 7 15
TOCKAZAREZ 7 7
IDN 7 6
OP_PRIDRUZI 7 11
IDN 7 6
PLUS 7 16
BROJ 7 17
D_ZAGRADA 7 4
L_VIT_ZAGRADA 7 5
KR_FOR 8 13
L_ZAGRADA 8 2
IDN 8 8
OP_PRIDRUZI 8 11
BROJ 8 12
TOCKAZAREZ 8 7
IDN 8 8
OP_LT 8 14
BROJ 8 15
TOCKAZAREZ 8 7
IDN 8 8
OP_PRIDRUZI 8 11
IDN 8 8
PLUS 8 16
BROJ 8 17
D_ZAGRADA 8 4
L_VIT_ZAGRADA 8 5
KR_FOR 9 13
L_ZAGRADA 9 2
IDN 9 9
OP_PRIDRUZI 9 11
BROJ 9 12
TOCKAZAREZ 9 7
IDN 9 9
OP_LT 9 14
BROJ 9 15
TOCKAZAREZ 9 7
IDN 9 9
OP_PRIDRUZI 9 11
IDN 9 9
PLUS 9 16
BROJ 9 17
D_ZAGRADA 9 4
L_VIT_ZAGRADA 9 5
IDN 10 10
OP_PRIDRUZI 10 11
IDN 10 10
PLUS 10 16
BROJ 10 17
TOCKAZAREZ 10 7
D_VIT_ZAGRADA 11 18
D_VIT_ZAGRADA 12 18
D_VIT_ZAGRADA 13 18
KR_RETURN 14 19
IDN 14 10
TOCKAZAREZ 14 7
D_VIT_ZAGRADA 15 18
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , j
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , k
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , count
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , k
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , k
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , k
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , k
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , j
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , k
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , count
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , j
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , k
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , k
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , k
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , k
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , count
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
count : INT
i : INT
j : INT
k : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=j, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=j, elements=0]
IDN (3,j) [symbol=j]
TOCKAZAREZ (3,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (4,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=k, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=k, elements=0]
IDN (4,k) [symbol=k]
TOCKAZAREZ (4,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (5,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=count, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=count, elements=0]
IDN (5,count) [symbol=count]
TOCKAZAREZ (5,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,count) [symbol=count]
OP_PRIDRUZI (6,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
TOCKAZAREZ (6,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (7,for)
L_ZAGRADA (7,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,i) [symbol=i]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,0) [type=int]
TOCKAZAREZ (7,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,i) [symbol=i]
OP_LT (7,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,3) [type=int]
TOCKAZAREZ (7,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,i) [symbol=i]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,i) [symbol=i]
PLUS (7,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,1) [type=int]
D_ZAGRADA (7,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (7,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (8,for)
L_ZAGRADA (8,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,j) [symbol=j]
OP_PRIDRUZI (8,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (8,0) [type=int]
TOCKAZAREZ (8,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,j) [symbol=j]
OP_LT (8,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (8,3) [type=int]
TOCKAZAREZ (8,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,j) [symbol=j]
OP_PRIDRUZI (8,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,j) [symbol=j]
PLUS (8,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (8,1) [type=int]
D_ZAGRADA (8,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (8,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (9,for)
L_ZAGRADA (9,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (9,k) [symbol=k]
OP_PRIDRUZI (9,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,0) [type=int]
TOCKAZAREZ (9,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (9,k) [symbol=k]
OP_LT (9,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,3) [type=int]
TOCKAZAREZ (9,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (9,k) [symbol=k]
OP_PRIDRUZI (9,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (9,k) [symbol=k]
PLUS (9,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,1) [type=int]
D_ZAGRADA (9,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (9,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (10,count) [symbol=count]
OP_PRIDRUZI (10,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (10,count) [symbol=count]
PLUS (10,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (10,1) [type=int]
TOCKAZAREZ (10,;)
D_VIT_ZAGRADA (11,})
D_VIT_ZAGRADA (12,})
D_VIT_ZAGRADA (13,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (14,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (14,count) [symbol=count]
TOCKAZAREZ (14,;)
D_VIT_ZAGRADA (15,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
; Local variable j at (R7-8)
; Local variable k at (R7-12)
; Local variable count at (R7-16)
SUB R7, 16, R7 ; allocate 4 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-16) ; assign to count
; For loop with increment (TODO)
LOAD R0, (R7-16) ; load variable count
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 16, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
int sum;
sum = 0;
i = 0;
while (i < 10) {
sum = sum + i;
i = i + 1;
if (sum > 20) {
break;
}
}
return sum;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 IDN sum
9 OP_PRIDRUZI =
10 BROJ 0
11 KR_WHILE while
12 OP_LT <
13 BROJ 10
14 PLUS +
15 BROJ 1
16 KR_IF if
17 OP_GT >
18 BROJ 20
19 KR_BREAK break
20 D_VIT_ZAGRADA }
21 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
IDN 3 8
TOCKAZAREZ 3 7
IDN 4 8
OP_PRIDRUZI 4 9
BROJ 4 10
TOCKAZAREZ 4 7
IDN 5 6
OP_PRIDRUZI 5 9
BROJ 5 10
TOCKAZAREZ 5 7
KR_WHILE 6 11
L_ZAGRADA 6 2
IDN 6 6
OP_LT 6 12
BROJ 6 13
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
IDN 7 8
OP_PRIDRUZI 7 9
IDN 7 8
PLUS 7 14
IDN 7 6
TOCKAZAREZ 7 7
IDN 8 6
OP_PRIDRUZI 8 9
IDN 8 6
PLUS 8 14
BROJ 8 15
TOCKAZAREZ 8 7
KR_IF 9 16
L_ZAGRADA 9 2
IDN 9 8
OP_GT 9 17
BROJ 9 18
D_ZAGRADA 9 4
L_VIT_ZAGRADA 9 5
KR_BREAK 10 19
TOCKAZAREZ 10 7
D_VIT_ZAGRADA 11 20
D_VIT_ZAGRADA 12 20
KR_RETURN 13 21
IDN 13 8
TOCKAZAREZ 13 7
D_VIT_ZAGRADA 14 20
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , sum
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_BREAK , break
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , sum
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 20
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_BREAK , break
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
i : INT
sum : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (3,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=sum, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=sum, elements=0]
IDN (3,sum) [symbol=sum]
TOCKAZAREZ (3,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,sum) [symbol=sum]
OP_PRIDRUZI (4,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
TOCKAZAREZ (4,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,0) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_WHILE (6,while)
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
OP_LT (6,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,10) [type=int]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,sum) [symbol=sum]
OP_PRIDRUZI (7,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,sum) [symbol=sum]
PLUS (7,+)
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,i) [symbol=i]
TOCKAZAREZ (7,;)
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,i) [symbol=i]
OP_PRIDRUZI (8,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (8,i) [symbol=i]
PLUS (8,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (8,1) [type=int]
TOCKAZAREZ (8,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (9,if)
L_ZAGRADA (9,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (9,sum) [symbol=sum]
OP_GT (9,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,20) [type=int]
D_ZAGRADA (9,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (9,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_BREAK (10,break)
TOCKAZAREZ (10,;)
D_VIT_ZAGRADA (11,})
D_VIT_ZAGRADA (12,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (13,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (13,sum) [symbol=sum]
TOCKAZAREZ (13,;)
D_VIT_ZAGRADA (14,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
; Local variable sum at (R7-8)
SUB R7, 8, R7 ; allocate 2 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-8) ; assign to sum
MOVE 0, R0 ; load constant 0
STORE R0, (R7-4) ; assign to i
; While loop
L_LOOP1 ; while loop start
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 10, R0 ; load constant 10
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLT L_SC_TRUE1 ; comparison OP_LT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_BREAK1 ; exit while loop
; Compound statement
LOAD R0, (R7-8) ; load variable sum
PUSH R0 ; save left operand
LOAD R0, (R7-4) ; load variable i
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
STORE R0, (R7-8) ; assign to sum
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
STORE R0, (R7-4) ; assign to i
; If statement
LOAD R0, (R7-8) ; load variable sum
PUSH R0 ; save left operand
MOVE 20, R0 ; load constant 20
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE2 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END2
L_SC_TRUE2
MOVE 1, R0 ; comparison result true
L_SC_END2
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
; Break statement (TODO)
L_END1 ; end if
L_CONTINUE1 ; while continue
JP L_LOOP1 ; repeat while loop
L_BREAK1 ; while loop end
LOAD R0, (R7-8) ; load variable sum
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 8, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
i = 0;
while (i < 10) {
i = i + 1;
if (i % 2 == 0) {
continue;
}
if (i > 5) {
break;
}
}
return i;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 0
10 KR_WHILE while
11 OP_LT <
12 BROJ 10
13 PLUS +
14 BROJ 1
15 KR_IF if
16 OP_MOD %
17 BROJ 2
18 OP_EQ ==
19 KR_CONTINUE continue
20 D_VIT_ZAGRADA }
21 OP_GT >
22 BROJ 5
23 KR_BREAK break
24 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_WHILE 4 10
L_ZAGRADA 4 2
IDN 4 6
OP_LT 4 11
BROJ 4 12
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
IDN 5 6
OP_PRIDRUZI 5 8
IDN 5 6
PLUS 5 13
BROJ 5 14
TOCKAZAREZ 5 7
KR_IF 6 15
L_ZAGRADA 6 2
IDN 6 6
OP_MOD 6 16
BROJ 6 17
OP_EQ 6 18
BROJ 6 9
D_ZAGRADA 6 4
L_VIT_ZAGRADA 6 5
KR_CONTINUE 7 19
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 20
KR_IF 9 15
L_ZAGRADA 9 2
IDN 9 6
OP_GT 9 21
BROJ 9 22
D_ZAGRADA 9 4
L_VIT_ZAGRADA 9 5
KR_BREAK 10 23
TOCKAZAREZ 10 7
D_VIT_ZAGRADA 11 20
D_VIT_ZAGRADA 12 20
KR_RETURN 13 24
IDN 13 6
TOCKAZAREZ 13 7
D_VIT_ZAGRADA 14 20
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_CONTINUE , continue
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_BREAK , break
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_MOD , %
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_CONTINUE , continue
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_BREAK , break
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
i : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_WHILE (4,while)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_LT (4,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,10) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
OP_PRIDRUZI (5,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (5,i) [symbol=i]
PLUS (5,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (6,if)
L_ZAGRADA (6,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (6,i) [symbol=i]
OP_MOD (6,%)
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,2) [type=int]
OP_EQ (6,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,0) [type=int]
D_ZAGRADA (6,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_CONTINUE (7,continue)
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (9,if)
L_ZAGRADA (9,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (9,i) [symbol=i]
OP_GT (9,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (9,5) [type=int]
D_ZAGRADA (9,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (9,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_BREAK (10,break)
TOCKAZAREZ (10,;)
D_VIT_ZAGRADA (11,})
D_VIT_ZAGRADA (12,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (13,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (13,i) [symbol=i]
TOCKAZAREZ (13,;)
D_VIT_ZAGRADA (14,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 0, R0 ; load constant 0
STORE R0, (R7-4) ; assign to i
; While loop
L_LOOP1 ; while loop start
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 10, R0 ; load constant 10
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SLT L_SC_TRUE1 ; comparison OP_LT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_BREAK1 ; exit while loop
; Compound statement
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 1, R0 ; load constant 1
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
STORE R0, (R7-4) ; assign to i
; If statement
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 2, R0 ; load constant 2
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Modulo not implemented (TODO)
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_EQ L_SC_TRUE2 ; comparison OP_EQ
MOVE 0, R0 ; comparison result false
JP L_SC_END2
L_SC_TRUE2
MOVE 1, R0 ; comparison result true
L_SC_END2
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
; Continue statement (TODO)
L_END1 ; end if
; If statement
LOAD R0, (R7-4) ; load variable i
PUSH R0 ; save left operand
MOVE 5, R0 ; load constant 5
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE3 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END3
L_SC_TRUE3
MOVE 1, R0 ; comparison result true
L_SC_END3
CMP R0, 0
JP_EQ L_END2 ; if condition is false
; Compound statement
; Break statement (TODO)
L_END2 ; end if
L_CONTINUE1 ; while continue
JP L_LOOP1 ; repeat while loop
L_BREAK1 ; while loop end
LOAD R0, (R7-4) ; load variable i
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int i;
for (i = 0; i < 10; i = i + 1) {
if (i == 3) {
continue;
}
if (i == 7) {
break;
}
}
return i;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN i
7 TOCKAZAREZ ;
8 KR_FOR for
9 OP_PRIDRUZI =
10 BROJ 0
11 OP_LT <
12 BROJ 10
13 PLUS +
14 BROJ 1
15 KR_IF if
16 OP_EQ ==
17 BROJ 3
18 KR_CONTINUE continue
19 D_VIT_ZAGRADA }
20 BROJ 7
21 KR_BREAK break
22 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_FOR 3 8
L_ZAGRADA 3 2
IDN 3 6
OP_PRIDRUZI 3 9
BROJ 3 10
TOCKAZAREZ 3 7
IDN 3 6
OP_LT 3 11
BROJ 3 12
TOCKAZAREZ 3 7
IDN 3 6
OP_PRIDRUZI 3 9
IDN 3 6
PLUS 3 13
BROJ 3 14
D_ZAGRADA 3 4
L_VIT_ZAGRADA 3 5
KR_IF 4 15
L_ZAGRADA 4 2
IDN 4 6
OP_EQ 4 16
BROJ 4 17
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
KR_CONTINUE 5 18
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 19
KR_IF 7 15
L_ZAGRADA 7 2
IDN 7 6
OP_EQ 7 16
BROJ 7 20
D_ZAGRADA 7 4
L_VIT_ZAGRADA 7 5
KR_BREAK 8 21
TOCKAZAREZ 8 7
D_VIT_ZAGRADA 9 19
D_VIT_ZAGRADA 10 19
KR_RETURN 11 22
IDN 11 6
TOCKAZAREZ 11 7
D_VIT_ZAGRADA 12 19
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_CONTINUE , continue
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_BREAK , break
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , i
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_petlje>
KR_FOR , for
L_ZAGRADA , (
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 10
TOCKAZAREZ , ;
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_CONTINUE , continue
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
OP_EQ , ==
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_BREAK , break
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , i
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
i : INT
Nested Scope 1:
(no symbols)
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=i, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=i, elements=0]
IDN (2,i) [symbol=i]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_petlje>> [lvalue=false, elements=0]
KR_FOR (3,for)
L_ZAGRADA (3,()
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,0) [type=int]
TOCKAZAREZ (3,;)
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_LT (3,<)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,10) [type=int]
TOCKAZAREZ (3,;)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,i) [symbol=i]
PLUS (3,+)
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,1) [type=int]
D_ZAGRADA (3,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (3,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (4,if)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,i) [symbol=i]
OP_EQ (4,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,3) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_CONTINUE (5,continue)
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (7,if)
L_ZAGRADA (7,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (7,i) [symbol=i]
OP_EQ (7,==)
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,7) [type=int]
D_ZAGRADA (7,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (7,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_BREAK (8,break)
TOCKAZAREZ (8,;)
D_VIT_ZAGRADA (9,})
D_VIT_ZAGRADA (10,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (11,return)
<<izraz>> [type=INT, lvalue=true, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=true, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<log_i_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=true, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=true, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=true, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (11,i) [symbol=i]
TOCKAZAREZ (11,;)
D_VIT_ZAGRADA (12,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable i at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
; For loop with increment (TODO)
LOAD R0, (R7-4) ; load variable i
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int multiply_three(int a, int b, int c) {
return a * b * c;
}
int main(void) {
return multiply_three(2, 3, 4);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN multiply_three
2 L_ZAGRADA (
3 IDN a
4 ZAREZ ,
5 IDN b
6 IDN c
7 D_ZAGRADA )
8 L_VIT_ZAGRADA {
9 KR_RETURN return
10 ASTERISK *
11 TOCKAZAREZ ;
12 D_VIT_ZAGRADA }
13 IDN main
14 KR_VOID void
15 BROJ 2
16 BROJ 3
17 BROJ 4
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
ZAREZ 1 4
KR_INT 1 0
IDN 1 5
ZAREZ 1 4
KR_INT 1 0
IDN 1 6
D_ZAGRADA 1 7
L_VIT_ZAGRADA 1 8
KR_RETURN 2 9
IDN 2 3
ASTERISK 2 10
IDN 2 5
ASTERISK 2 10
IDN 2 6
TOCKAZAREZ 2 11
D_VIT_ZAGRADA 3 12
KR_INT 5 0
IDN 5 13
L_ZAGRADA 5 2
KR_VOID 5 14
D_ZAGRADA 5 7
L_VIT_ZAGRADA 5 8
KR_RETURN 6 9
IDN 6 1
L_ZAGRADA 6 2
BROJ 6 15
ZAREZ 6 4
BROJ 6 16
ZAREZ 6 4
BROJ 6 17
D_ZAGRADA 6 7
TOCKAZAREZ 6 11
D_VIT_ZAGRADA 7 12
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , multiply_three
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , a
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , b
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , c
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , multiply_three
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , multiply_three
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , a
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , b
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , c
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , multiply_three
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
multiply_three : INT (INT, INT, INT) [defined]
Nested Scope 1:
a : INT
b : INT
c : INT
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT, INT, INT), lvalue=false, id=multiply_three, elements=0]
<<izravni_deklarator>> [type=INT(INT, INT, INT), lvalue=false, id=multiply_three, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=multiply_three, elements=0]
IDN (1,multiply_three) [symbol=multiply_three]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=a, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=a, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=a, elements=0]
IDN (1,a) [symbol=a]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=b, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=b, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=b, elements=0]
IDN (1,b) [symbol=b]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=c, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=c, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=c, elements=0]
IDN (1,c) [symbol=c]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (2,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,a) [symbol=a]
ASTERISK (2,*)
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,b) [symbol=b]
ASTERISK (2,*)
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,c) [symbol=c]
TOCKAZAREZ (2,;)
D_VIT_ZAGRADA (3,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (5,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (5,main) [symbol=main]
L_ZAGRADA (5,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (5,void)
D_ZAGRADA (5,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (5,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (6,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT, INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT, INT, INT), lvalue=false, elements=0]
IDN (6,multiply_three) [symbol=multiply_three]
L_ZAGRADA (6,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,2) [type=int]
ZAREZ (6,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,3) [type=int]
ZAREZ (6,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,4) [type=int]
D_ZAGRADA (6,))
TOCKAZAREZ (6,;)
D_VIT_ZAGRADA (7,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MULTIPLY_THREE ; Function multiply_three
; Parameter a at (R7+8)
; Parameter b at (R7+12)
; Parameter c at (R7+16)
; Compound statement
LOAD R0, (R7+8) ; load variable a
PUSH R0 ; save left operand
LOAD R0, (R7+12) ; load variable b
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Multiplication: R0 * R1
CMP R1, 0
JP_EQ L_BREAK1 ; if multiplier is 0
MOVE R0, R2 ; save multiplicand
MOVE R1, R3 ; save multiplier
MOVE 0, R0 ; initialize result
L_LOOP1 ; multiplication loop
ADD R0, R2, R0 ; add multiplicand to result
SUB R3, 1, R3 ; decrement multiplier
CMP R3, 0
JP_GT L_LOOP1 ; repeat if multiplier > 0
L_BREAK1 ; multiplication done
PUSH R0 ; save left operand
LOAD R0, (R7+16) ; load variable c
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
; Multiplication: R0 * R1
CMP R1, 0
JP_EQ L_BREAK2 ; if multiplier is 0
MOVE R0, R2 ; save multiplicand
MOVE R1, R3 ; save multiplier
MOVE 0, R0 ; initialize result
L_LOOP2 ; multiplication loop
ADD R0, R2, R0 ; add multiplicand to result
SUB R3, 1, R3 ; decrement multiplier
CMP R3, 0
JP_GT L_LOOP2 ; repeat if multiplier > 0
L_BREAK2 ; multiplication done
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from multiply_three
F_MAIN ; Function main
; Compound statement
; Function call: multiply_three
MOVE 4, R0 ; load constant 4
PUSH R0 ; push argument 3
MOVE 3, R0 ; load constant 3
PUSH R0 ; push argument 2
MOVE 2, R0 ; load constant 2
PUSH R0 ; push argument 1
CALL F_MULTIPLY_THREE ; call multiply_three
ADD R7, 12, R7 ; cleanup 3 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int x;
x = 5;
if (x > 0) {
return 1;
}
return 0;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 KR_IF if
11 OP_GT >
12 BROJ 0
13 KR_RETURN return
14 BROJ 1
15 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_IF 4 10
L_ZAGRADA 4 2
IDN 4 6
OP_GT 4 11
BROJ 4 12
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
KR_RETURN 5 13
BROJ 5 14
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 15
KR_RETURN 7 13
BROJ 7 12
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 15
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
Nested Scope 1:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (4,if)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_GT (4,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,0) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
; If statement
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE1 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_END1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int add_four(int a, int b, int c, int d) {
return a + b + c + d;
}
int main(void) {
return add_four(1, 2, 3, 4);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN add_four
2 L_ZAGRADA (
3 IDN a
4 ZAREZ ,
5 IDN b
6 IDN c
7 IDN d
8 D_ZAGRADA )
9 L_VIT_ZAGRADA {
10 KR_RETURN return
11 PLUS +
12 TOCKAZAREZ ;
13 D_VIT_ZAGRADA }
14 IDN main
15 KR_VOID void
16 BROJ 1
17 BROJ 2
18 BROJ 3
19 BROJ 4
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
IDN 1 3
ZAREZ 1 4
KR_INT 1 0
IDN 1 5
ZAREZ 1 4
KR_INT 1 0
IDN 1 6
ZAREZ 1 4
KR_INT 1 0
IDN 1 7
D_ZAGRADA 1 8
L_VIT_ZAGRADA 1 9
KR_RETURN 2 10
IDN 2 3
PLUS 2 11
IDN 2 5
PLUS 2 11
IDN 2 6
PLUS 2 11
IDN 2 7
TOCKAZAREZ 2 12
D_VIT_ZAGRADA 3 13
KR_INT 5 0
IDN 5 14
L_ZAGRADA 5 2
KR_VOID 5 15
D_ZAGRADA 5 8
L_VIT_ZAGRADA 5 9
KR_RETURN 6 10
IDN 6 1
L_ZAGRADA 6 2
BROJ 6 16
ZAREZ 6 4
BROJ 6 17
ZAREZ 6 4
BROJ 6 18
ZAREZ 6 4
BROJ 6 19
D_ZAGRADA 6 8
TOCKAZAREZ 6 12
D_VIT_ZAGRADA 7 13
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , add_four
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , a
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , b
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , c
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , d
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , d
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , add_four
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , add_four
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , a
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , b
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , c
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
IDN , d
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , a
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , b
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , c
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , d
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , add_four
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
add_four : INT (INT, INT, INT, INT) [defined]
main : INT () [defined]
Nested Scope 1:
a : INT
b : INT
c : INT
d : INT
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(INT, INT, INT, INT), lvalue=false, id=add_four, elements=0]
<<izravni_deklarator>> [type=INT(INT, INT, INT, INT), lvalue=false, id=add_four, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=add_four, elements=0]
IDN (1,add_four) [symbol=add_four]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=INT, lvalue=true, id=a, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=a, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=a, elements=0]
IDN (1,a) [symbol=a]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=b, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=b, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=b, elements=0]
IDN (1,b) [symbol=b]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=c, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=c, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=c, elements=0]
IDN (1,c) [symbol=c]
ZAREZ (1,,)
<<deklaracija_parametra>> [type=INT, lvalue=true, id=d, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT, lvalue=true, id=d, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=d, elements=0]
IDN (1,d) [symbol=d]
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (2,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,a) [symbol=a]
PLUS (2,+)
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,b) [symbol=b]
PLUS (2,+)
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,c) [symbol=c]
PLUS (2,+)
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (2,d) [symbol=d]
TOCKAZAREZ (2,;)
D_VIT_ZAGRADA (3,})
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (5,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (5,main) [symbol=main]
L_ZAGRADA (5,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (5,void)
D_ZAGRADA (5,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (5,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (6,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT(INT, INT, INT, INT), lvalue=false, elements=0]
<<primarni_izraz>> [type=INT(INT, INT, INT, INT), lvalue=false, elements=0]
IDN (6,add_four) [symbol=add_four]
L_ZAGRADA (6,()
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<lista_argumenata>> [lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,1) [type=int]
ZAREZ (6,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,2) [type=int]
ZAREZ (6,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,3) [type=int]
ZAREZ (6,,)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (6,4) [type=int]
D_ZAGRADA (6,))
TOCKAZAREZ (6,;)
D_VIT_ZAGRADA (7,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_ADD_FOUR ; Function add_four
; Parameter a at (R7+8)
; Parameter b at (R7+12)
; Parameter c at (R7+16)
; Parameter d at (R7+20)
; Compound statement
LOAD R0, (R7+8) ; load variable a
PUSH R0 ; save left operand
LOAD R0, (R7+12) ; load variable b
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
PUSH R0 ; save left operand
LOAD R0, (R7+16) ; load variable c
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
PUSH R0 ; save left operand
LOAD R0, (R7+20) ; load variable d
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
ADD R0, R1, R0 ; addition
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from add_four
F_MAIN ; Function main
; Compound statement
; Function call: add_four
MOVE 4, R0 ; load constant 4
PUSH R0 ; push argument 4
MOVE 3, R0 ; load constant 3
PUSH R0 ; push argument 3
MOVE 2, R0 ; load constant 2
PUSH R0 ; push argument 2
MOVE 1, R0 ; load constant 1
PUSH R0 ; push argument 1
CALL F_ADD_FOUR ; call add_four
ADD R7, 16, R7 ; cleanup 4 arguments
MOVE R6, R0 ; function result
MOVE R0, R6 ; return value
RET ; return from function
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int value;
int *pointer;
value = 5;
pointer = &value;
*pointer = *pointer + 2;
return value;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN value
7 TOCKAZAREZ ;
8 ASTERISK *
9 IDN pointer
10 OP_PRIDRUZI =
11 BROJ 5
12 AMPERSAND &
13 PLUS +
14 BROJ 2
15 KR_RETURN return
16 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
ASTERISK 3 8
IDN 3 9
TOCKAZAREZ 3 7
IDN 4 6
OP_PRIDRUZI 4 10
BROJ 4 11
TOCKAZAREZ 4 7
IDN 5 9
OP_PRIDRUZI 5 10
AMPERSAND 5 12
IDN 5 6
TOCKAZAREZ 5 7
ASTERISK 6 8
IDN 6 9
OP_PRIDRUZI 6 10
ASTERISK 6 8
IDN 6 9
PLUS 6 13
BROJ 6 14
TOCKAZAREZ 6 7
KR_RETURN 7 15
IDN 7 6
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 16
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , value
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , pointer
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , value
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , pointer
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
AMPERSAND , &
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , value
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , pointer
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , pointer
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , value
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , value
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , pointer
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , value
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , pointer
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
AMPERSAND , &
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , value
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , pointer
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , pointer
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , value
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<init_deklarator> ::= <deklarator>
SEMANTIC ERRORS:
semantic error
int add_pointer(int *ptr) {
return *ptr + 3;
}
int main(void) {
int number;
int *p;
number = 4;
p = &number;
return add_pointer(p);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN add_pointer
2 L_ZAGRADA (
3 ASTERISK *
4 IDN ptr
5 D_ZAGRADA )
6 L_VIT_ZAGRADA {
7 KR_RETURN return
8 PLUS +
9 BROJ 3
10 TOCKAZAREZ ;
11 D_VIT_ZAGRADA }
12 IDN main
13 KR_VOID void
14 IDN number
15 IDN p
16 OP_PRIDRUZI =
17 BROJ 4
18 AMPERSAND &
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
ASTERISK 1 3
IDN 1 4
D_ZAGRADA 1 5
L_VIT_ZAGRADA 1 6
KR_RETURN 2 7
ASTERISK 2 3
IDN 2 4
PLUS 2 8
BROJ 2 9
TOCKAZAREZ 2 10
D_VIT_ZAGRADA 3 11
KR_INT 5 0
IDN 5 12
L_ZAGRADA 5 2
KR_VOID 5 13
D_ZAGRADA 5 5
L_VIT_ZAGRADA 5 6
KR_INT 6 0
IDN 6 14
TOCKAZAREZ 6 10
KR_INT 7 0
ASTERISK 7 3
IDN 7 15
TOCKAZAREZ 7 10
IDN 8 14
OP_PRIDRUZI 8 16
BROJ 8 17
TOCKAZAREZ 8 10
IDN 9 15
OP_PRIDRUZI 9 16
AMPERSAND 9 18
IDN 9 14
TOCKAZAREZ 9 10
KR_RETURN 10 7
IDN 10 1
L_ZAGRADA 10 2
IDN 10 15
D_ZAGRADA 10 5
TOCKAZAREZ 10 10
D_VIT_ZAGRADA 11 11
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , add_pointer
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , ptr
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , number
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , p
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , number
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , p
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
AMPERSAND , &
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , number
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , add_pointer
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , p
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , add_pointer
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , ptr
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , number
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , p
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , number
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , p
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
AMPERSAND , &
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , number
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , add_pointer
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , p
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<deklaracija_parametra> ::= <specifikatori_deklaracije> <deklarator>
SEMANTIC ERRORS:
semantic error
int main(void) {
int value;
int *p1;
int **p2;
value = 2;
p1 = &value;
p2 = &p1;
**p2 = **p2 + 8;
return value;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN value
7 TOCKAZAREZ ;
8 ASTERISK *
9 IDN p1
10 IDN p2
11 OP_PRIDRUZI =
12 BROJ 2
13 AMPERSAND &
14 PLUS +
15 BROJ 8
16 KR_RETURN return
17 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
KR_INT 3 0
ASTERISK 3 8
IDN 3 9
TOCKAZAREZ 3 7
KR_INT 4 0
ASTERISK 4 8
ASTERISK 4 8
IDN 4 10
TOCKAZAREZ 4 7
IDN 5 6
OP_PRIDRUZI 5 11
BROJ 5 12
TOCKAZAREZ 5 7
IDN 6 9
OP_PRIDRUZI 6 11
AMPERSAND 6 13
IDN 6 6
TOCKAZAREZ 6 7
IDN 7 10
OP_PRIDRUZI 7 11
AMPERSAND 7 13
IDN 7 9
TOCKAZAREZ 7 7
ASTERISK 8 8
ASTERISK 8 8
IDN 8 10
OP_PRIDRUZI 8 11
ASTERISK 8 8
ASTERISK 8 8
IDN 8 10
PLUS 8 14
BROJ 8 15
TOCKAZAREZ 8 7
KR_RETURN 9 16
IDN 9 6
TOCKAZAREZ 9 7
D_VIT_ZAGRADA 10 17
Parse error: Sintaksna greška na retku 4.
Pročitan uniformni znak: ASTERISK (*).
Očekivani uniformni znakovi: IDN, KR_CONST.
Parse error: Sintaksna greška na retku 4.
Pročitan uniformni znak: ASTERISK (*).
Očekivani uniformni znakovi: IDN, KR_CONST.
PARSER ERRORS:
Sintaksna greška na retku 4.
Pročitan uniformni znak: ASTERISK (*).
Očekivani uniformni znakovi: IDN, KR_CONST.
int main(void) {
int values[3];
int *ptr;
values[0] = 1;
values[1] = 2;
values[2] = 3;
ptr = values;
ptr = ptr + 2;
return *ptr;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN values
7 L_UGL_ZAGRADA [
8 BROJ 3
9 D_UGL_ZAGRADA ]
10 TOCKAZAREZ ;
11 ASTERISK *
12 IDN ptr
13 BROJ 0
14 OP_PRIDRUZI =
15 BROJ 1
16 BROJ 2
17 PLUS +
18 KR_RETURN return
19 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
L_UGL_ZAGRADA 2 7
BROJ 2 8
D_UGL_ZAGRADA 2 9
TOCKAZAREZ 2 10
KR_INT 3 0
ASTERISK 3 11
IDN 3 12
TOCKAZAREZ 3 10
IDN 4 6
L_UGL_ZAGRADA 4 7
BROJ 4 13
D_UGL_ZAGRADA 4 9
OP_PRIDRUZI 4 14
BROJ 4 15
TOCKAZAREZ 4 10
IDN 5 6
L_UGL_ZAGRADA 5 7
BROJ 5 15
D_UGL_ZAGRADA 5 9
OP_PRIDRUZI 5 14
BROJ 5 16
TOCKAZAREZ 5 10
IDN 6 6
L_UGL_ZAGRADA 6 7
BROJ 6 16
D_UGL_ZAGRADA 6 9
OP_PRIDRUZI 6 14
BROJ 6 8
TOCKAZAREZ 6 10
IDN 7 12
OP_PRIDRUZI 7 14
IDN 7 6
TOCKAZAREZ 7 10
IDN 8 12
OP_PRIDRUZI 8 14
IDN 8 12
PLUS 8 17
BROJ 8 16
TOCKAZAREZ 8 10
KR_RETURN 9 18
ASTERISK 9 11
IDN 9 12
TOCKAZAREZ 9 10
D_VIT_ZAGRADA 10 19
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , values
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , ptr
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , values
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , values
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , values
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , values
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , values
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , ptr
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , values
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , values
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , values
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , values
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<init_deklarator> ::= <deklarator>
SEMANTIC ERRORS:
semantic error
int difference(int *end, int *start) {
return end - start;
}
int main(void) {
int array[4];
int *begin;
int *finish;
begin = array;
finish = array + 4;
return difference(finish, begin);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN difference
2 L_ZAGRADA (
3 ASTERISK *
4 IDN end
5 ZAREZ ,
6 IDN start
7 D_ZAGRADA )
8 L_VIT_ZAGRADA {
9 KR_RETURN return
10 MINUS -
11 TOCKAZAREZ ;
12 D_VIT_ZAGRADA }
13 IDN main
14 KR_VOID void
15 IDN array
16 L_UGL_ZAGRADA [
17 BROJ 4
18 D_UGL_ZAGRADA ]
19 IDN begin
20 IDN finish
21 OP_PRIDRUZI =
22 PLUS +
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
ASTERISK 1 3
IDN 1 4
ZAREZ 1 5
KR_INT 1 0
ASTERISK 1 3
IDN 1 6
D_ZAGRADA 1 7
L_VIT_ZAGRADA 1 8
KR_RETURN 2 9
IDN 2 4
MINUS 2 10
IDN 2 6
TOCKAZAREZ 2 11
D_VIT_ZAGRADA 3 12
KR_INT 5 0
IDN 5 13
L_ZAGRADA 5 2
KR_VOID 5 14
D_ZAGRADA 5 7
L_VIT_ZAGRADA 5 8
KR_INT 6 0
IDN 6 15
L_UGL_ZAGRADA 6 16
BROJ 6 17
D_UGL_ZAGRADA 6 18
TOCKAZAREZ 6 11
KR_INT 7 0
ASTERISK 7 3
IDN 7 19
TOCKAZAREZ 7 11
KR_INT 8 0
ASTERISK 8 3
IDN 8 20
TOCKAZAREZ 8 11
IDN 9 19
OP_PRIDRUZI 9 21
IDN 9 15
TOCKAZAREZ 9 11
IDN 10 20
OP_PRIDRUZI 10 21
IDN 10 15
PLUS 10 22
BROJ 10 17
TOCKAZAREZ 10 11
KR_RETURN 11 9
IDN 11 1
L_ZAGRADA 11 2
IDN 11 20
ZAREZ 11 5
IDN 11 19
D_ZAGRADA 11 7
TOCKAZAREZ 11 11
D_VIT_ZAGRADA 12 12
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , difference
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , end
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , start
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , end
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , start
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , array
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , begin
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , finish
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , begin
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , array
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , finish
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , array
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , difference
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , finish
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , begin
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , difference
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , end
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , start
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , end
MINUS , -
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , start
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , array
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , begin
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , finish
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , begin
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , array
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , finish
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , array
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , difference
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , finish
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , begin
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<deklaracija_parametra> ::= <specifikatori_deklaracije> <deklarator>
SEMANTIC ERRORS:
semantic error
void increment(int *value) {
*value = *value + 1;
}
int main(void) {
int counter;
counter = 0;
increment(&counter);
increment(&counter);
return counter;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_VOID void
1 IDN increment
2 L_ZAGRADA (
3 KR_INT int
4 ASTERISK *
5 IDN value
6 D_ZAGRADA )
7 L_VIT_ZAGRADA {
8 OP_PRIDRUZI =
9 PLUS +
10 BROJ 1
11 TOCKAZAREZ ;
12 D_VIT_ZAGRADA }
13 IDN main
14 IDN counter
15 BROJ 0
16 AMPERSAND &
17 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_VOID 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 3
ASTERISK 1 4
IDN 1 5
D_ZAGRADA 1 6
L_VIT_ZAGRADA 1 7
ASTERISK 2 4
IDN 2 5
OP_PRIDRUZI 2 8
ASTERISK 2 4
IDN 2 5
PLUS 2 9
BROJ 2 10
TOCKAZAREZ 2 11
D_VIT_ZAGRADA 3 12
KR_INT 5 3
IDN 5 13
L_ZAGRADA 5 2
KR_VOID 5 0
D_ZAGRADA 5 6
L_VIT_ZAGRADA 5 7
KR_INT 6 3
IDN 6 14
TOCKAZAREZ 6 11
IDN 7 14
OP_PRIDRUZI 7 8
BROJ 7 15
TOCKAZAREZ 7 11
IDN 8 1
L_ZAGRADA 8 2
AMPERSAND 8 16
IDN 8 14
D_ZAGRADA 8 6
TOCKAZAREZ 8 11
IDN 9 1
L_ZAGRADA 9 2
AMPERSAND 9 16
IDN 9 14
D_ZAGRADA 9 6
TOCKAZAREZ 9 11
KR_RETURN 10 17
IDN 10 14
TOCKAZAREZ 10 11
D_VIT_ZAGRADA 11 12
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , increment
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , value
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , value
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , value
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , counter
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , counter
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , increment
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
AMPERSAND , &
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , counter
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , increment
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
AMPERSAND , &
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , counter
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , counter
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_VOID , void
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , increment
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , value
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , value
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , value
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , counter
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , counter
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , increment
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
AMPERSAND , &
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , counter
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , increment
L_ZAGRADA , (
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
AMPERSAND , &
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , counter
D_ZAGRADA , )
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , counter
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<deklaracija_parametra> ::= <specifikatori_deklaracije> <deklarator>
SEMANTIC ERRORS:
semantic error
int main(void) {
int data[2];
int *first;
int *second;
data[0] = 5;
data[1] = 7;
first = data;
second = data + 1;
if (first < second) {
return *second;
}
return *first;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN data
7 L_UGL_ZAGRADA [
8 BROJ 2
9 D_UGL_ZAGRADA ]
10 TOCKAZAREZ ;
11 ASTERISK *
12 IDN first
13 IDN second
14 BROJ 0
15 OP_PRIDRUZI =
16 BROJ 5
17 BROJ 1
18 BROJ 7
19 PLUS +
20 KR_IF if
21 OP_LT <
22 KR_RETURN return
23 D_VIT_ZAGRADA }
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
L_UGL_ZAGRADA 2 7
BROJ 2 8
D_UGL_ZAGRADA 2 9
TOCKAZAREZ 2 10
KR_INT 3 0
ASTERISK 3 11
IDN 3 12
TOCKAZAREZ 3 10
KR_INT 4 0
ASTERISK 4 11
IDN 4 13
TOCKAZAREZ 4 10
IDN 5 6
L_UGL_ZAGRADA 5 7
BROJ 5 14
D_UGL_ZAGRADA 5 9
OP_PRIDRUZI 5 15
BROJ 5 16
TOCKAZAREZ 5 10
IDN 6 6
L_UGL_ZAGRADA 6 7
BROJ 6 17
D_UGL_ZAGRADA 6 9
OP_PRIDRUZI 6 15
BROJ 6 18
TOCKAZAREZ 6 10
IDN 7 12
OP_PRIDRUZI 7 15
IDN 7 6
TOCKAZAREZ 7 10
IDN 8 13
OP_PRIDRUZI 8 15
IDN 8 6
PLUS 8 19
BROJ 8 17
TOCKAZAREZ 8 10
KR_IF 9 20
L_ZAGRADA 9 2
IDN 9 12
OP_LT 9 21
IDN 9 13
D_ZAGRADA 9 4
L_VIT_ZAGRADA 9 5
KR_RETURN 10 22
ASTERISK 10 11
IDN 10 13
TOCKAZAREZ 10 10
D_VIT_ZAGRADA 11 23
KR_RETURN 12 22
ASTERISK 12 11
IDN 12 12
TOCKAZAREZ 12 10
D_VIT_ZAGRADA 13 23
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , data
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , first
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , second
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , data
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , data
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , first
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , data
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , second
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , data
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , first
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , second
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , second
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , first
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , data
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , first
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , second
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , data
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , data
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , first
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , data
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , second
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , data
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , first
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , second
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , second
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , first
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<init_deklarator> ::= <deklarator>
SEMANTIC ERRORS:
semantic error
int sum(int *start, int *end) {
int total;
total = 0;
while (start < end) {
total = total + *start;
start = start + 1;
}
return total;
}
int main(void) {
int numbers[3];
numbers[0] = 2;
numbers[1] = 4;
numbers[2] = 6;
return sum(numbers, numbers + 3);
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN sum
2 L_ZAGRADA (
3 ASTERISK *
4 IDN start
5 ZAREZ ,
6 IDN end
7 D_ZAGRADA )
8 L_VIT_ZAGRADA {
9 IDN total
10 TOCKAZAREZ ;
11 OP_PRIDRUZI =
12 BROJ 0
13 KR_WHILE while
14 OP_LT <
15 PLUS +
16 BROJ 1
17 D_VIT_ZAGRADA }
18 KR_RETURN return
19 IDN main
20 KR_VOID void
21 IDN numbers
22 L_UGL_ZAGRADA [
23 BROJ 3
24 D_UGL_ZAGRADA ]
25 BROJ 2
26 BROJ 4
27 BROJ 6
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_INT 1 0
ASTERISK 1 3
IDN 1 4
ZAREZ 1 5
KR_INT 1 0
ASTERISK 1 3
IDN 1 6
D_ZAGRADA 1 7
L_VIT_ZAGRADA 1 8
KR_INT 2 0
IDN 2 9
TOCKAZAREZ 2 10
IDN 3 9
OP_PRIDRUZI 3 11
BROJ 3 12
TOCKAZAREZ 3 10
KR_WHILE 4 13
L_ZAGRADA 4 2
IDN 4 4
OP_LT 4 14
IDN 4 6
D_ZAGRADA 4 7
L_VIT_ZAGRADA 4 8
IDN 5 9
OP_PRIDRUZI 5 11
IDN 5 9
PLUS 5 15
ASTERISK 5 3
IDN 5 4
TOCKAZAREZ 5 10
IDN 6 4
OP_PRIDRUZI 6 11
IDN 6 4
PLUS 6 15
BROJ 6 16
TOCKAZAREZ 6 10
D_VIT_ZAGRADA 7 17
KR_RETURN 8 18
IDN 8 9
TOCKAZAREZ 8 10
D_VIT_ZAGRADA 9 17
KR_INT 11 0
IDN 11 19
L_ZAGRADA 11 2
KR_VOID 11 20
D_ZAGRADA 11 7
L_VIT_ZAGRADA 11 8
KR_INT 12 0
IDN 12 21
L_UGL_ZAGRADA 12 22
BROJ 12 23
D_UGL_ZAGRADA 12 24
TOCKAZAREZ 12 10
IDN 13 21
L_UGL_ZAGRADA 13 22
BROJ 13 12
D_UGL_ZAGRADA 13 24
OP_PRIDRUZI 13 11
BROJ 13 25
TOCKAZAREZ 13 10
IDN 14 21
L_UGL_ZAGRADA 14 22
BROJ 14 16
D_UGL_ZAGRADA 14 24
OP_PRIDRUZI 14 11
BROJ 14 26
TOCKAZAREZ 14 10
IDN 15 21
L_UGL_ZAGRADA 15 22
BROJ 15 25
D_UGL_ZAGRADA 15 24
OP_PRIDRUZI 15 11
BROJ 15 27
TOCKAZAREZ 15 10
KR_RETURN 16 18
IDN 16 1
L_ZAGRADA 16 2
IDN 16 21
ZAREZ 16 5
IDN 16 21
PLUS 16 15
BROJ 16 23
D_ZAGRADA 16 7
TOCKAZAREZ 16 10
D_VIT_ZAGRADA 17 17
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , sum
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , start
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , end
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , total
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , total
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , start
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , end
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , total
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , total
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , start
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , start
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , start
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , total
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , numbers
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , numbers
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , numbers
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , numbers
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 6
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , numbers
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , numbers
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , sum
L_ZAGRADA , (
<lista_parametara>
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , start
ZAREZ , ,
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , end
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , total
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , total
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , start
OP_LT , <
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , end
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , total
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , total
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , start
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , start
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , start
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , total
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , numbers
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , numbers
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , numbers
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , numbers
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 6
TOCKAZAREZ , ;
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , sum
L_ZAGRADA , (
<lista_argumenata>
<lista_argumenata>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , numbers
ZAREZ , ,
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , numbers
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_ZAGRADA , )
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<deklaracija_parametra> ::= <specifikatori_deklaracije> <deklarator>
SEMANTIC ERRORS:
semantic error
struct Pair {
int first;
int second;
};
int main(void) {
struct Pair pair;
struct Pair *pointer;
pair.first = 3;
pair.second = 9;
pointer = &pair;
return pointer->first + pointer->second;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_STRUCT struct
1 IDN Pair
2 L_VIT_ZAGRADA {
3 KR_INT int
4 IDN first
5 TOCKAZAREZ ;
6 IDN second
7 D_VIT_ZAGRADA }
8 IDN main
9 L_ZAGRADA (
10 KR_VOID void
11 D_ZAGRADA )
12 IDN pair
13 ASTERISK *
14 IDN pointer
15 TOCKA .
16 OP_PRIDRUZI =
17 BROJ 3
18 BROJ 9
19 AMPERSAND &
20 KR_RETURN return
21 MINUS -
22 OP_GT >
23 PLUS +
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_STRUCT 1 0
IDN 1 1
L_VIT_ZAGRADA 1 2
KR_INT 2 3
IDN 2 4
TOCKAZAREZ 2 5
KR_INT 3 3
IDN 3 6
TOCKAZAREZ 3 5
D_VIT_ZAGRADA 4 7
TOCKAZAREZ 4 5
KR_INT 6 3
IDN 6 8
L_ZAGRADA 6 9
KR_VOID 6 10
D_ZAGRADA 6 11
L_VIT_ZAGRADA 6 2
KR_STRUCT 7 0
IDN 7 1
IDN 7 12
TOCKAZAREZ 7 5
KR_STRUCT 8 0
IDN 8 1
ASTERISK 8 13
IDN 8 14
TOCKAZAREZ 8 5
IDN 9 12
TOCKA 9 15
IDN 9 4
OP_PRIDRUZI 9 16
BROJ 9 17
TOCKAZAREZ 9 5
IDN 10 12
TOCKA 10 15
IDN 10 6
OP_PRIDRUZI 10 16
BROJ 10 18
TOCKAZAREZ 10 5
IDN 11 14
OP_PRIDRUZI 11 16
AMPERSAND 11 19
IDN 11 12
TOCKAZAREZ 11 5
KR_RETURN 12 20
IDN 12 14
MINUS 12 21
OP_GT 12 22
IDN 12 4
PLUS 12 23
IDN 12 14
MINUS 12 21
OP_GT 12 22
IDN 12 6
TOCKAZAREZ 12 5
D_VIT_ZAGRADA 13 7
Parse error: Sintaksna greška na retku 12.
Pročitan uniformni znak: OP_GT (>).
Očekivani uniformni znakovi: AMPERSAND, ASTERISK, BROJ, IDN, L_ZAGRADA, MINUS, NIZ_ZNAKOVA, OP_DEC, OP_INC, OP_NEG, OP_TILDA, PLUS, ZNAK.
Parse error: Sintaksna greška na retku 12.
Pročitan uniformni znak: OP_GT (>).
Očekivani uniformni znakovi: AMPERSAND, ASTERISK, BROJ, IDN, L_ZAGRADA, MINUS, NIZ_ZNAKOVA, OP_DEC, OP_INC, OP_NEG, OP_TILDA, PLUS, ZNAK.
PARSER ERRORS:
Sintaksna greška na retku 12.
Pročitan uniformni znak: OP_GT (>).
Očekivani uniformni znakovi: AMPERSAND, ASTERISK, BROJ, IDN, L_ZAGRADA, MINUS, NIZ_ZNAKOVA, OP_DEC, OP_INC, OP_NEG, OP_TILDA, PLUS, ZNAK.
int main(void) {
int x;
x = 5;
if (x > 0) {
return 1;
} else {
return 0;
}
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN x
7 TOCKAZAREZ ;
8 OP_PRIDRUZI =
9 BROJ 5
10 KR_IF if
11 OP_GT >
12 BROJ 0
13 KR_RETURN return
14 BROJ 1
15 D_VIT_ZAGRADA }
16 KR_ELSE else
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
TOCKAZAREZ 2 7
IDN 3 6
OP_PRIDRUZI 3 8
BROJ 3 9
TOCKAZAREZ 3 7
KR_IF 4 10
L_ZAGRADA 4 2
IDN 4 6
OP_GT 4 11
BROJ 4 12
D_ZAGRADA 4 4
L_VIT_ZAGRADA 4 5
KR_RETURN 5 13
BROJ 5 14
TOCKAZAREZ 5 7
D_VIT_ZAGRADA 6 15
KR_ELSE 6 16
L_VIT_ZAGRADA 6 5
KR_RETURN 7 13
BROJ 7 12
TOCKAZAREZ 7 7
D_VIT_ZAGRADA 8 15
D_VIT_ZAGRADA 9 15
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
KR_ELSE , else
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , x
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<naredba_grananja>
KR_IF , if
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , x
OP_GT , >
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
KR_ELSE , else
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
D_VIT_ZAGRADA , }
No semantic errors found.
=== SYMBOL TABLE DUMP ===
Global Scope:
main : INT () [defined]
Nested Scope 1:
x : INT
Nested Scope 1:
(no symbols)
Nested Scope 2:
(no symbols)
=== SEMANTIC TREE DUMP ===
<<prijevodna_jedinica>> [lvalue=false, elements=0]
<<vanjska_deklaracija>> [lvalue=false, elements=0]
<<definicija_funkcije>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (1,int)
<<deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT(), lvalue=false, id=main, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=main, elements=0]
IDN (1,main) [symbol=main]
L_ZAGRADA (1,()
<<lista_parametara>> [lvalue=false, elements=0]
<<deklaracija_parametra>> [type=VOID, lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=VOID, lvalue=false, elements=0]
<<specifikator_tipa>> [type=VOID, lvalue=false, elements=0]
KR_VOID (1,void)
D_ZAGRADA (1,))
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (1,{)
<<lista_deklaracija>> [lvalue=false, elements=0]
<<deklaracija>> [lvalue=false, elements=0]
<<specifikatori_deklaracije>> [type=INT, lvalue=false, elements=0]
<<specifikator_tipa>> [type=INT, lvalue=false, elements=0]
KR_INT (2,int)
<<lista_init_deklaratora>> [lvalue=false, elements=0]
<<init_deklarator>> [lvalue=false, elements=0]
<<deklarator>> [type=INT, lvalue=true, id=x, elements=0]
<<izravni_deklarator>> [type=INT, lvalue=true, id=x, elements=0]
IDN (2,x) [symbol=x]
TOCKAZAREZ (2,;)
<<lista_naredbi>> [lvalue=false, elements=0]
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<izraz_naredba>> [type=INT, lvalue=false, elements=0]
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (3,x) [symbol=x]
OP_PRIDRUZI (3,=)
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (3,5) [type=int]
TOCKAZAREZ (3,;)
<<naredba>> [lvalue=false, elements=0]
<<naredba_grananja>> [lvalue=false, elements=0]
KR_IF (4,if)
L_ZAGRADA (4,()
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=true, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=true, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=true, elements=0]
<<cast_izraz>> [type=INT, lvalue=true, elements=0]
<<unarni_izraz>> [type=INT, lvalue=true, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=true, elements=0]
<<primarni_izraz>> [type=INT, lvalue=true, elements=0]
IDN (4,x) [symbol=x]
OP_GT (4,>)
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (4,0) [type=int]
D_ZAGRADA (4,))
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (4,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (5,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (5,1) [type=int]
TOCKAZAREZ (5,;)
D_VIT_ZAGRADA (6,})
KR_ELSE (6,else)
<<naredba>> [lvalue=false, elements=0]
<<slozena_naredba>> [lvalue=false, elements=0]
L_VIT_ZAGRADA (6,{)
<<lista_naredbi>> [lvalue=false, elements=0]
<<naredba>> [lvalue=false, elements=0]
<<naredba_skoka>> [lvalue=false, elements=0]
KR_RETURN (7,return)
<<izraz>> [type=INT, lvalue=false, elements=0]
<<izraz_pridruzivanja>> [type=INT, lvalue=false, elements=0]
<<log_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<log_i_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_ili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_xili_izraz>> [type=INT, lvalue=false, elements=0]
<<bin_i_izraz>> [type=INT, lvalue=false, elements=0]
<<jednakosni_izraz>> [type=INT, lvalue=false, elements=0]
<<odnosni_izraz>> [type=INT, lvalue=false, elements=0]
<<aditivni_izraz>> [type=INT, lvalue=false, elements=0]
<<multiplikativni_izraz>> [type=INT, lvalue=false, elements=0]
<<cast_izraz>> [type=INT, lvalue=false, elements=0]
<<unarni_izraz>> [type=INT, lvalue=false, elements=0]
<<postfiks_izraz>> [type=INT, lvalue=false, elements=0]
<<primarni_izraz>> [type=INT, lvalue=false, elements=0]
BROJ (7,0) [type=int]
TOCKAZAREZ (7,;)
D_VIT_ZAGRADA (8,})
D_VIT_ZAGRADA (9,})
; Program entry point
MOVE 40000, R7 ; init stack pointer
CALL F_MAIN ; call main
HALT ; end of program, R6 holds return value
; Function definitions
F_MAIN ; Function main
; Local variable x at (R7-4)
SUB R7, 4, R7 ; allocate 1 local variables
; Compound statement
; Local declarations (TODO)
MOVE 5, R0 ; load constant 5
STORE R0, (R7-4) ; assign to x
; If-else statement
LOAD R0, (R7-4) ; load variable x
PUSH R0 ; save left operand
MOVE 0, R0 ; load constant 0
MOVE R0, R1 ; right operand to R1
POP R0 ; restore left operand
CMP R0, R1
JP_SGT L_SC_TRUE1 ; comparison OP_GT
MOVE 0, R0 ; comparison result false
JP L_SC_END1
L_SC_TRUE1
MOVE 1, R0 ; comparison result true
L_SC_END1
CMP R0, 0
JP_EQ L_ELSE1 ; if condition is false
; Compound statement
MOVE 1, R0 ; load constant 1
MOVE R0, R6 ; return value
RET ; return from function
JP L_END1 ; skip else
L_ELSE1 ; else clause
; Compound statement
MOVE 0, R0 ; load constant 0
MOVE R0, R6 ; return value
RET ; return from function
L_END1 ; end if-else
ADD R7, 4, R7 ; deallocate local variables
MOVE 0, R6 ; default return value
RET ; return from main
; Global variables
int main(void) {
int buffer[5];
int *ptr;
int result;
buffer[0] = 1;
buffer[1] = 3;
buffer[2] = 5;
buffer[3] = 7;
buffer[4] = 9;
ptr = buffer;
result = 0;
while (ptr < buffer + 5) {
result = result + *ptr;
ptr = ptr + 1;
}
return result;
}
tablica znakova:
indeks uniformni znak izvorni tekst
0 KR_INT int
1 IDN main
2 L_ZAGRADA (
3 KR_VOID void
4 D_ZAGRADA )
5 L_VIT_ZAGRADA {
6 IDN buffer
7 L_UGL_ZAGRADA [
8 BROJ 5
9 D_UGL_ZAGRADA ]
10 TOCKAZAREZ ;
11 ASTERISK *
12 IDN ptr
13 IDN result
14 BROJ 0
15 OP_PRIDRUZI =
16 BROJ 1
17 BROJ 3
18 BROJ 2
19 BROJ 7
20 BROJ 4
21 BROJ 9
22 KR_WHILE while
23 OP_LT <
24 PLUS +
25 D_VIT_ZAGRADA }
26 KR_RETURN return
niz uniformnih znakova:
uniformni znak redak indeks u tablicu znakova
KR_INT 1 0
IDN 1 1
L_ZAGRADA 1 2
KR_VOID 1 3
D_ZAGRADA 1 4
L_VIT_ZAGRADA 1 5
KR_INT 2 0
IDN 2 6
L_UGL_ZAGRADA 2 7
BROJ 2 8
D_UGL_ZAGRADA 2 9
TOCKAZAREZ 2 10
KR_INT 3 0
ASTERISK 3 11
IDN 3 12
TOCKAZAREZ 3 10
KR_INT 4 0
IDN 4 13
TOCKAZAREZ 4 10
IDN 5 6
L_UGL_ZAGRADA 5 7
BROJ 5 14
D_UGL_ZAGRADA 5 9
OP_PRIDRUZI 5 15
BROJ 5 16
TOCKAZAREZ 5 10
IDN 6 6
L_UGL_ZAGRADA 6 7
BROJ 6 16
D_UGL_ZAGRADA 6 9
OP_PRIDRUZI 6 15
BROJ 6 17
TOCKAZAREZ 6 10
IDN 7 6
L_UGL_ZAGRADA 7 7
BROJ 7 18
D_UGL_ZAGRADA 7 9
OP_PRIDRUZI 7 15
BROJ 7 8
TOCKAZAREZ 7 10
IDN 8 6
L_UGL_ZAGRADA 8 7
BROJ 8 17
D_UGL_ZAGRADA 8 9
OP_PRIDRUZI 8 15
BROJ 8 19
TOCKAZAREZ 8 10
IDN 9 6
L_UGL_ZAGRADA 9 7
BROJ 9 20
D_UGL_ZAGRADA 9 9
OP_PRIDRUZI 9 15
BROJ 9 21
TOCKAZAREZ 9 10
IDN 10 12
OP_PRIDRUZI 10 15
IDN 10 6
TOCKAZAREZ 10 10
IDN 11 13
OP_PRIDRUZI 11 15
BROJ 11 14
TOCKAZAREZ 11 10
KR_WHILE 12 22
L_ZAGRADA 12 2
IDN 12 12
OP_LT 12 23
IDN 12 6
PLUS 12 24
BROJ 12 8
D_ZAGRADA 12 4
L_VIT_ZAGRADA 12 5
IDN 13 13
OP_PRIDRUZI 13 15
IDN 13 13
PLUS 13 24
ASTERISK 13 11
IDN 13 12
TOCKAZAREZ 13 10
IDN 14 12
OP_PRIDRUZI 14 15
IDN 14 12
PLUS 14 24
BROJ 14 16
TOCKAZAREZ 14 10
D_VIT_ZAGRADA 15 25
KR_RETURN 16 26
IDN 16 13
TOCKAZAREZ 16 10
D_VIT_ZAGRADA 17 25
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , buffer
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , ptr
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
<specifikator_tipa>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 9
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
OP_LT , <
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<prijevodna_jedinica>
<vanjska_deklaracija>
<definicija_funkcije>
<specifikatori_deklaracije>
KR_INT , int
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , main
L_ZAGRADA , (
<lista_parametara>
<deklaracija_parametra>
<specifikatori_deklaracije>
KR_VOID , void
D_ZAGRADA , )
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_deklaracija>
<lista_deklaracija>
<lista_deklaracija>
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
<izravni_deklarator>
IDN , buffer
L_UGL_ZAGRADA , [
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_UGL_ZAGRADA , ]
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<pokazivac>
ASTERISK , *
<izravni_deklarator>
IDN , ptr
TOCKAZAREZ , ;
<deklaracija>
<specifikatori_deklaracije>
KR_INT , int
<lista_init_deklaratora>
<init_deklarator>
<deklarator>
<izravni_deklarator>
IDN , result
TOCKAZAREZ , ;
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 2
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 3
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 7
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
L_UGL_ZAGRADA , [
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 4
D_UGL_ZAGRADA , ]
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 9
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 0
TOCKAZAREZ , ;
<naredba>
<naredba_petlje>
KR_WHILE , while
L_ZAGRADA , (
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
OP_LT , <
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , buffer
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 5
D_ZAGRADA , )
<naredba>
<slozena_naredba>
L_VIT_ZAGRADA , {
<lista_naredbi>
<lista_naredbi>
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<unarni_operator>
ASTERISK , *
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
TOCKAZAREZ , ;
<naredba>
<izraz_naredba>
<izraz>
<izraz_pridruzivanja>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
OP_PRIDRUZI , =
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , ptr
PLUS , +
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
BROJ , 1
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<naredba>
<naredba_skoka>
KR_RETURN , return
<izraz>
<izraz_pridruzivanja>
<log_ili_izraz>
<log_i_izraz>
<bin_ili_izraz>
<bin_xili_izraz>
<bin_i_izraz>
<jednakosni_izraz>
<odnosni_izraz>
<aditivni_izraz>
<multiplikativni_izraz>
<cast_izraz>
<unarni_izraz>
<postfiks_izraz>
<primarni_izraz>
IDN , result
TOCKAZAREZ , ;
D_VIT_ZAGRADA , }
<init_deklarator> ::= <deklarator>
SEMANTIC ERRORS:
semantic error